1import{r as h,j as e,u as ae}from"./react-vendor-oGnIhQt2.js";import{u as G}from"./useProposals-Dp8fVK6A.js";import{t as k,B as m,j as N,s as ne,C as A,e as C,F as re,L as le,l as ie,u as T}from"./index-DVrUGVMO.js";import{S as E}from"./separator-BbH0Yr1u.js";import{p}from"./dateOnly-qgaHYHLv.js";import ce from"./refresh-cw-C0LGWFkR.js";import de from"./circle-alert-COEYGdJO.js";import I from"./circle-check-BhvD5Ahv.js";import oe from"./plane-Bdijs-LI.js";import{c as u,g as me}from"./date-fns-DU_j6nL5.js";import{d as b}from"./de-Djqs-V1s.js";import{T as xe,a as ue,b as f,c as he}from"./tabs-CAIOeLJC.js";import{P as ge}from"./progress-v3ewb1lP.js";import{D as fe,a as je,b as ve,c as be}from"./dialog-D5Nmo3zm.js";import{R as pe,a as Ne}from"./radio-group-CszN0ZzD.js";import{T as _e}from"./textarea-BVnLWlN2.js";import{S as ye}from"./SEOHead-BTLjanhv.js";import{A as M,a as we,b as z,c as L,d as R,e as H,f as $,g as O,h as B}from"./alert-dialog-C2--BmRE.js";import ke from"./plus-aAdZ4Lkx.js";import q from"./clock-EadJ_jlU.js";import Ae from"./pencil-CCNnYUi6.js";import Ce from"./link-2-DXucgHUy.js";import Se from"./files-BZ_mdEzL.js";import V from"./send-BiVRYLvO.js";import De from"./undo-2-DifskA8l.js";import K from"./eye-C-REeE3c.js";import U from"./ban-DaYfnoD5.js";import Pe from"./circle-x-B8V1OV8Y.js";import"./radix-core-kiNkrX5-.js";const Te={omnivore:"Omnivor",vegetarian:"Vegetarisch",vegan:"Vegan",pescatarian:"Pescetarisch",other:"Sonstiges"};function l({label:s,value:r}){return r?e.jsxs("div",{className:"flex justify-between py-1",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:s}),e.jsx("span",{className:"text-sm font-medium text-right max-w-[60%]",children:r})]}):null}function Ee({proposalId:s}){const[r,j]=h.useState([]),[d,g]=h.useState(!0),x=async()=>{g(!0);try{const{data:t,error:i}=await ne.from("proposal_travellers").select("*").eq("proposal_id",s).order("sort_order",{ascending:!0});if(i)throw i;j(t||[])}catch(t){console.error("Error fetching travellers:",t)}finally{g(!1)}};return h.useEffect(()=>{x()},[s]),d?e.jsx("div",{className:"text-muted-foreground text-center py-8",children:"Lade Teilnehmerdaten..."}):r.length===0?e.jsxs("div",{className:"text-center py-12 text-muted-foreground",children:[e.jsx(k,{className:"h-10 w-10 mx-auto mb-3 opacity-40"}),e.jsx("p",{children:"Noch keine Teilnehmerdaten eingegangen."}),e.jsx("p",{className:"text-xs mt-1",children:"Der Kunde kann die Daten über seinen Proposal-Link eingeben."})]}):e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"font-semibold flex items-center gap-2",children:[e.jsx(k,{className:"h-4 w-4"}),r.length," Teilnehmer"]}),e.jsxs(m,{variant:"outline",size:"sm",onClick:x,children:[e.jsx(ce,{className:"h-3.5 w-3.5 mr-1"}),"Aktualisieren"]})]}),r.map((t,i)=>{const c=[t.first_name,t.last_name].filter(Boolean).join(" ")||`Teilnehmer ${i+1}`,a=t.arrival_flight||t.departure_flight,o=!t.first_name||!t.last_name||!t.date_of_birth||!t.emergency_contact_name;return e.jsxs("div",{className:"border rounded-lg p-4 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-semibold",children:c}),o?e.jsxs(N,{variant:"outline",className:"text-amber-600 border-amber-300 text-xs",children:[e.jsx(de,{className:"h-3 w-3 mr-1"}),"Unvollständig"]}):e.jsxs(N,{variant:"outline",className:"text-emerald-600 border-emerald-300 text-xs",children:[e.jsx(I,{className:"h-3 w-3 mr-1"}),"Vollständig"]})]}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:["Aktualisiert: ",u(new Date(t.updated_at),"dd.MM.yyyy HH:mm",{locale:b})]})]}),e.jsx(l,{label:"E-Mail",value:t.email}),e.jsx(l,{label:"Telefon",value:t.phone}),e.jsx(l,{label:"Geburtsdatum",value:t.date_of_birth?u(p(t.date_of_birth),"dd.MM.yyyy"):null}),e.jsx(l,{label:"Ernährung",value:t.dietary_preference?Te[t.dietary_preference]||t.dietary_preference:null}),e.jsx(l,{label:"Allergien",value:t.allergies}),e.jsx(l,{label:"Vorerkrankungen",value:t.pre_existing_conditions}),e.jsx(E,{}),e.jsx(l,{label:"Notfallkontakt",value:t.emergency_contact_name}),e.jsx(l,{label:"Notfall-Tel.",value:t.emergency_contact_phone}),a&&e.jsxs(e.Fragment,{children:[e.jsx(E,{}),e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground font-medium mt
1-1",children:[e.jsx(oe,{className:"h-3 w-3"})," Flugdaten"]}),e.jsx(l,{label:"Hinflug",value:[t.arrival_flight,t.arrival_date?u(p(t.arrival_date),"dd.MM.yyyy"):""].filter(Boolean).join(" â ")}),e.jsx(l,{label:"Rückflug",value:[t.departure_flight,t.departure_date?u(p(t.departure_date),"dd.MM.yyyy"):""].filter(Boolean).join(" â ")})]}),e.jsx(l,{label:"Sonderwünsche",value:t.special_requests})]},t.id)})]})}const F={draft:{label:"Entwurf",color:"bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-300",icon:q},sent:{label:"Gesendet",color:"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300",icon:V},viewed:{label:"Angesehen",color:"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300",icon:K},accepted:{label:"Angenommen",color:"bg-emerald-100 text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-300",icon:I},declined:{label:"Abgelehnt",color:"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300",icon:Pe},cancelled:{label:"Storniert",color:"bg-muted text-muted-foreground",icon:U}},w=["Kunde hat abgesagt","Keine Rückmeldung","Hat anderes Angebot gewählt","Sonstiges"];function Me({proposal:s,onEdit:r,onViewTravellers:j,onDuplicated:d}){var P;const{sendProposal:g,revokeProposal:x,cancelProposal:t,duplicateProposal:i}=G(),[c,a]=h.useState(!1),[o,S]=h.useState(w[0]),[v,D]=h.useState(""),Z=["draft","sent","viewed"].includes(s.status),J=async()=>{const n=o==="Sonstiges";if(n&&!v.trim()){T.error("Bitte einen Grund angeben");return}const te=n?v.trim():v.trim()?`${o} â ${v.trim()}`:o;await t.mutateAsync({proposalId:s.id,reason:te}),a(!1),D(""),S(w[0])},X=async()=>{const n=await i.mutateAsync(s.id);n&&d(n)},_=F[s.status]||F.draft,Q=_.icon,W=s.valid_until&&me(p(s.valid_until)),Y=s.total_persons>0?Math.round(s.traveller_complete/s.total_persons*100):0,y=(P=s.packages)==null?void 0:P[0],ee=()=>{const n=`${window.location.origin}/proposal/${s.token}`;navigator.clipboard.writeText(n),T.success("Link kopiert")},se=()=>{g.mutate(s.id)};return e.jsx(A,{className:"group hover:shadow-md transition-shadow",children:e.jsxs(C,{className:"p-5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsxs(N,{className:_.color,variant:"secondary",children:[e.jsx(Q,{className:"h-3 w-3 mr-1"}),_.label]}),W&&s.status!=="accepted"&&s.status!=="declined"&&e.jsx(N,{variant:"destructive",className:"text-xs",children:"Abgelaufen"})]}),e.jsx("h3",{className:"font-semibold text-lg truncate",children:s.title}),s.inquiry&&e.jsxs("p",{className:"text-sm text-muted-foreground mt-0.5",children:[s.inquiry.first_name," ",s.inquiry.last_name,s.inquiry.inquiry_type==="corporate"&&" (Corporate)",s.inquiry.inquiry_type==="private"&&" (Privat)"]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 mt-2 text-sm text-muted-foreground",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(k,{className:"h-3.5 w-3.5"}),s.total_persons," ",s.total_persons===1?"Person":"Personen"]}),y&&e.jsxs("span",{children:[y.name," · â¬",y.price_per_person.toLocaleString("de-DE"),"/Person"]}),s.valid_until&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(q,{className:"h-3.5 w-3.5"}),"Gültig bis ",u(p(s.valid_until),"dd.MM.yyyy",{locale:b})]})]}),s.status==="accepted"&&e.jsxs("div",{className:"mt-3",children:[e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground mb-1",children:[e.jsx("span",{children:"Teilnehmerdaten"}),e.jsxs("span",{children:[s.traveller_complete,"/",s.total_persons," vollständig"]})]}),e.jsx(ge,{value:Y,className:"h-2"})]})]}),e.jsxs("div",{className:"flex flex-col gap-1.5 shrink-0",children:[e.jsxs(m,{size:"sm",variant:"outline",onClick:r,children:[e.jsx(Ae,{className:"h-3.5 w-3.5 mr-1"})," Bearbeiten"]}),e.jsxs(m,{size:"sm",variant:"outline",onClick:ee,children:[e.jsx(Ce,{className:"h-3.5 w-3.5 mr-1"})," Link"]}),e.jsxs(m,{size:"sm",variant:"outline",onClick:X,disabled:i.isPending,children:[e.jsx(Se,{className:"h-3.5 w-3.5 mr-1"})," Duplizieren"]}),s.status==="draft"&&e.jsxs(m,{size:"sm",variant:"outline",className:"text-destructive hover:text-destructive",onClick:se,children:[e.jsx(V,{className:"h-3.5 w-3.5 mr-1"})," Senden"]}),(s.status==="sent"||s.status==="viewed")&&e.jsxs(M,{children:[e.jsx(we,{asChild:!0,children:e.jsxs(m,{size:"sm",variant:"outline",children:[e.jsx(De,{className:"h-3.5 w-3.5 mr-1"})," Zurückziehen"]})}),e.jsxs(z,{children:[e.jsxs(L,{children:[e.jsx(R,{children:"Angebot zurückziehen?"}),e.jsx(H,{children:'Das Angebot wird auf "Entwurf" zurückgesetzt und der bisherige Link wird ungültig. Ein neuer Link wird generiert.'})]}),e.jsxs($,{children:[e.jsx(O,{children:"Abbrechen"}),e.jsx(B,{onClick:()=>x.mutate(s.id),children:"Zurückziehen"})]})]})]}),s.status==="accepted"&&e.jsxs(m,{size:"sm",variant:"outline",onClick:j,children:[e.jsx(K,{className:"h-3.5 w-3.5 mr-1"})," Daten"]}),Z&&e.jsxs(m,{size:"sm",variant:"outline",className:"text-destructive hover:text-destructive",onClick:()=>a(!0),children:[e.jsx(U,{className:"h-3.5 w-3.5 mr-1"})," Stornieren"]})]})]}),e.jsx(M,{open:c,onOpenChange:a,children:e.jsxs(z,{children:[e.jsxs(L,{children:[e.jsx(R,{children:"Angebot stornieren?"}),e.jsx(H,{children:'Das Angebot wird als final verloren markiert. Der Link wird für den Kunden ungültig. Die zugehörige Anfrage wird ebenfalls geschlossen und verschwindet aus âOffene Anfragen".'})]}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsx(pe,{value:o,onValueChange:S,children:w.map(n=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Ne,{value:n,id:`reason-${s.id}-${n}`}),e.jsx(le,{htmlFor:`reason-${s.id}-${n}`,className:"cursor-pointer font-normal",children:n})]},n))}),e.jsx(_e,{placeholder:o==="Sonstiges"?"Grund (Pflicht)":"Notiz (optional)",value:v,onCh
1ange:n=>D(n.target.value),rows:3})]}),e.jsxs($,{children:[e.jsx(O,{children:"Abbrechen"}),e.jsx(B,{className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",onClick:n=>{n.preventDefault(),J()},children:"Stornieren"})]})]})}),s.accepted_at&&e.jsxs("div",{className:"mt-3 pt-2 border-t space-y-2",children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Angenommen am ",u(new Date(s.accepted_at),"dd.MM.yyyy HH:mm",{locale:b}),s.accepted_signature_name&&e.jsxs(e.Fragment,{children:[" von ",e.jsx("span",{className:"font-medium text-foreground",children:s.accepted_signature_name})]})]}),(s.accepted_signature_name||s.accepted_ip)&&e.jsxs("details",{className:"text-xs text-muted-foreground",children:[e.jsxs("summary",{className:"cursor-pointer select-none flex items-center gap-1 hover:text-foreground",children:[e.jsx(ie,{className:"h-3 w-3"})," Rechtsnachweis anzeigen"]}),e.jsxs("div",{className:"mt-2 rounded-md bg-muted/50 p-3 space-y-1",children:[s.accepted_signature_name&&e.jsxs("p",{children:[e.jsx("span",{className:"text-foreground/70",children:"Unterschrift (getippt):"})," ",s.accepted_signature_name]}),s.accepted_ip&&e.jsxs("p",{children:[e.jsx("span",{className:"text-foreground/70",children:"IP-Adresse:"})," ",s.accepted_ip]}),s.accepted_user_agent&&e.jsxs("p",{className:"break-all",children:[e.jsx("span",{className:"text-foreground/70",children:"Gerät/Browser:"})," ",s.accepted_user_agent]}),s.accepted_snapshot!=null&&e.jsxs("div",{children:[e.jsx("span",{className:"text-foreground/70",children:"Angenommener Stand:"}),e.jsx("pre",{className:"mt-1 whitespace-pre-wrap break-all text-[10px] leading-relaxed bg-background rounded p-2 border",children:JSON.stringify(s.accepted_snapshot,null,2)})]})]})]})]}),s.declined_at&&e.jsxs("p",{className:"text-xs text-muted-foreground mt-3 pt-2 border-t",children:["Abgelehnt am ",u(new Date(s.declined_at),"dd.MM.yyyy HH:mm",{locale:b}),s.decline_reason&&` â ${s.decline_reason}`]}),s.cancelled_at&&e.jsxs("p",{className:"text-xs text-muted-foreground mt-3 pt-2 border-t",children:["Storniert am ",u(new Date(s.cancelled_at),"dd.MM.yyyy HH:mm",{locale:b}),s.cancellation_reason&&` â ${s.cancellation_reason}`]})]})})}function ds(){const s=ae(),{proposals:r,isLoading:j}=G(),[d,g]=h.useState("all"),[x,t]=h.useState(null),i=r.filter(a=>d==="all"?!0:d==="sent"?a.status==="sent"||a.status==="viewed":a.status===d),c={all:r.length,draft:r.filter(a=>a.status==="draft").length,sent:r.filter(a=>a.status==="sent"||a.status==="viewed").length,accepted:r.filter(a=>a.status==="accepted").length,declined:r.filter(a=>a.status==="declined").length,cancelled:r.filter(a=>a.status==="cancelled").length};return e.jsxs(e.Fragment,{children:[e.jsx(ye,{title:"Angebote",description:"Verwaltung individueller Reiseangebote"}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold tracking-tight",children:"Angebote"}),e.jsx("p",{className:"text-muted-foreground mt-1",children:"Private & Corporate Reiseangebote verwalten"})]}),e.jsxs(m,{onClick:()=>s("/admin/proposals/new"),children:[e.jsx(ke,{className:"h-4 w-4 mr-2"})," Neues Angebot"]})]}),e.jsxs(xe,{value:d,onValueChange:g,children:[e.jsxs(ue,{children:[e.jsxs(f,{value:"all",children:["Alle (",c.all,")"]}),e.jsxs(f,{value:"draft",children:["Entwürfe (",c.draft,")"]}),e.jsxs(f,{value:"sent",children:["Gesendet (",c.sent,")"]}),e.jsxs(f,{value:"accepted",children:["Angenommen (",c.accepted,")"]}),e.jsxs(f,{value:"declined",children:["Abgelehnt (",c.declined,")"]}
1),e.jsxs(f,{value:"cancelled",children:["Storniert (",c.cancelled,")"]})]}),e.jsx(he,{value:d,className:"mt-4",children:j?e.jsx("div",{className:"grid gap-4 md:grid-cols-2",children:[1,2,3].map(a=>e.jsx(A,{className:"animate-pulse",children:e.jsx(C,{className:"p-5 h-36"})},a))}):i.length===0?e.jsx(A,{children:e.jsxs(C,{className:"py-12 text-center text-muted-foreground",children:[e.jsx(re,{className:"h-12 w-12 mx-auto mb-3 opacity-30"}),e.jsx("p",{children:"Keine Angebote in diesem Status"})]})}):e.jsx("div",{className:"grid gap-4 md:grid-cols-2",children:i.map(a=>e.jsx(Me,{proposal:a,onEdit:()=>s(`/admin/proposals/${a.id}/edit`),onViewTravellers:()=>t(a.id),onDuplicated:o=>s(`/admin/proposals/${o}/edit`)},a.id))})})]})]}),e.jsx(fe,{open:!!x,onOpenChange:()=>t(null),children:e.jsxs(je,{className:"max-w-4xl max-h-[80vh] overflow-y-auto",children:[e.jsx(ve,{children:e.jsx(be,{children:"Teilnehmerdaten"})}),x&&e.jsx(Ee,{proposalId:x})]})})]})}export{ds as ProposalsPage};
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.