PageSourceSearch

https://bombanceparis.fr/assets/admin.clients._guestId-Bt-k0faE.js

js bombanceparis.fr collected 2026-10-06 03:44:29 UTC 4,468 bytes, 1 lines download raw bytes

1import{a9 as v,j as e,L as b}from"./index-Cq-VRf55.js";import{u as g}from"./useQuery-DVLnVCGP.js";import{m as f}from"./pilotage.functions-DU-QmdQi.js";import{P as N,Q as y,D as q,a as r,f as o,E as c,T as d,d as u,S as A,c as p,b as i,e as l}from"./ui-fzXuW2_5.js";import"./guard-BiUSO7Hk.js";import"./auth-middleware-DInhdbmz.js";import"./utils-BQHNewu7.js";function T(){const{guestId:n}=v.useParams(),{data:s,isLoading:m,error:x,refetch:h}=g({queryKey:["pilotage","guest",n],queryFn:()=>f({data:{id:n}}),retry:!1}),j=s?[s.guest.first_name,s.guest.last_name].filter(Boolean).join(" ")||"Sans nom":"Fiche client";return e.jsxs("div",{className:"space-y-6",children:[e.jsx(b,{to:"/admin/clients",className:"inline-block text-xs underline text-[#6b6a5c]",children:"← Retour à la liste des clients"}),e.jsx(N,{title:j,intro:"Historique tel qu'il est enregistré dans les sources. Les montants affichés sont ceux de la table, jamais la dépense personnelle de cette personne."}),e.jsx(y,{isLoading:m,error:x,retry:()=>{h()},children:s?e.jsxs(e.Fragment,{children:[e.jsx(q,{demo:s.demo}),e.jsxs(r,{title:"Identité",description:"Champs tels que fournis par la source, sans enrichissement.",children:[e.jsxs("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 text-sm",children:[e.jsx(a,{label:"Source",value:`${s.guest.source} · ${s.guest.source_id}`}),e.jsx(a,{label:"E-mail",value:s.guest.email}),e.jsx(a,{label:"Téléphone",value:s.guest.phone}),e.jsx(a,{label:"Langue",value:s.guest.language}),e.jsx(a,{label:"Première venue connue",value:o(s.guest.first_seen_at)}),e.jsx(a,{label:"Dernière venue confirmée",value:s.lastVisitAt?o(s.lastVisitAt):"Aucune visite confirmée"})]}),s.guest.notes?e.jsx("p",{className:"mt-3 text-sm text-[#43483a]",children:s.guest.notes}):null]}),e.jsx(r,{title:"Réservations",description:"Toutes les réservations rattachées à cette fiche, quelle que soit la période.",children:s.reservations.length?e.jsx(d,{head:["Jour","Service","Personnes","État","Canal","Table"],children:s.reservations.map(t=>e.jsxs("tr",{children:[e.jsx("td",{className:"py-2 pr-3",children:u(t.service_date)}),e.jsx("td",{className:"py-2 pr-3",children:A[t.service]??t.service}),e.jsx("td",{className:"py-2 pr-3",children:p(t.party_size)}),e.jsx("td",{className:"py-2 pr-3 text-xs",children:t.status==="absent"?e.jsx(i,{tone:"alerte",children:"Absence"}):e.jsx(i,{tone:"neutre",children:t.status})}),e.jsx("td",{className:"py-2 pr-3 text-xs",children:t.channel??"Non disponible"}),e.jsx("td",{className:"py-2 pr-3 text-xs",children:t.table_label??"Non disponible"})]},t.id))}):e.jsx(c,{children:"Aucune réservation rattachée à cette fiche."})}),e.jsx(r,{title:"Additions des tables concernées",description:"Seules les additions dont le rapprochement avec une réservation est confirmé sont comptées ; les rapprochements « probable » sont exclus tant qu'ils ne sont pas validés. Montant de l'addition complète de la table, et part attribuée à cette réservation lorsqu'une addition couvre plusieurs réservations. Ce n'est en aucun cas la dépense personnelle de cette personne : une table réunit plusieurs convives.",children:s.tables.length?e.jsxs(e.Fragment,{children:[e.jsx(d,{head:["Jour","Couverts à table","Addition de la table","Part de la réservation","Remarque"],children:s.tables.map(t=>e.jsxs("tr",{children:[e.jsx("td",{className:"py-2 pr-3",children:u(t.serviceDate)}),e.jsx("td",{className:"py-2 pr-3",children:t.covers===null?"Non disponible":p(t.covers)}),e.jsx("td",{className:"py-2 pr-3",children:l(t.tableNetCents)}),e.jsx("td",{className:"py-2 pr-3",children:t.multiReservation?l(t.attributedCents):"Addition entière"}),e.jsx("td",{className:"py-2 pr-3 text-xs",children:t.multiReservation?e.jsx(i,{tone:"attente",children:"Addition partagée entre plusieurs réservations"}):"—"})]},`${t.ticketId}-${t.reservationId}`))}),e.jsxs("p",{className:"mt-3 text-xs text-[#8a8878]",children:["Total des additions concernées : ",l(s.tablesTotalCents)," — chaque addition n'est comptée qu'une seule fois, même si elle apparaît sur plusieurs lignes."]})]}):e.jsx(c,{children:"Aucune addition rapprochée d'une réservation de cette fiche."})})]}):null})]})}function a({label:n,value:s}){return e.jsxs("div",{children:[e.jsx("dt",{className:"text-[11px] tracking-wide text-[#8a8878] uppercase",children:n}),e.jsx("dd",{className:"text-sm text-[#43483a]",children:s||"Non disponible"})]})}
1export{T as component};

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.