var __gh = require("react").createElement, __gf = require("react").Fragment; var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var stdin_exports={};__export(stdin_exports,{default:()=>stdin_default,featureConfig:()=>featureConfig});module.exports=__toCommonJS(stdin_exports);var dataSources=[];var import_react18=require("react"),import_lucide_react18=require("lucide-react");var import_react=__toESM(require("react")),import_lucide_react=require("lucide-react"),MARCA=null,FUENTE=null,fijarMarca=m=>{MARCA=m};function marca(){if(!MARCA)throw new Error("El portal se ha pintado antes de cargar la marca");return MARCA}var fijarFuente=f=>{FUENTE=f};function deFactura(){if(!FUENTE)throw new Error("El portal se ha pintado antes de saber de d\xF3nde salen las cifras");return FUENTE==="odoo"}var ficheroUrl=path=>"/api/files/serve?path="+encodeURIComponent(path),TOKEN_KEY="propietarios:token";function Logo({tam}){let m=marca();return m.logo?__gh("img",{src:ficheroUrl(m.logo),alt:m.nombre,style:{width:tam,height:tam,borderRadius:Math.round(tam*.26),objectFit:"cover",display:"block",flexShrink:0},"data-gufi-src":"ui.tsx:43"}):__gh("span",{style:{width:tam,height:tam,borderRadius:Math.round(tam*.26),background:B.ink,color:"#fff",fontSize:Math.round(tam*.46),fontWeight:650,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},"data-gufi-src":"ui.tsx:44"},m.nombre.slice(0,1).toUpperCase())}var GRAD="linear-gradient(145deg,#3a3a3c 0%,#1d1d1f 100%)",B={accent:"#1d1d1f",accent2:"#000000",gold:"#b8b8bd",grad:GRAD,ink:"#1d1d1f",sub:"#4a4a4f",muted:"#86868b",faint:"#a1a1a6",bg:"#f6f6f7",hair:"#e5e5e7",card:"#fff",accentSoft:"rgba(29,29,31,0.055)",accentLine:"rgba(29,29,31,0.20)",green:"#15803d",red:"#dc2626",amber:"#b45309"},B_CSS=` :root{ --b-accent:#1d1d1f; --b-ink:#1d1d1f; --b-muted:#86868b; --b-faint:#a1a1a6; --b-hair:#e5e5e7; --b-grad:${GRAD}; } .b-root{font-family:-apple-system,"SF Pro Display","SF Pro Text",BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;letter-spacing:-.014em;color:var(--b-ink);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;} .b-root h1,.b-root h2,.b-root h3{letter-spacing:-.03em;font-weight:600;} .b-num{font-variant-numeric:tabular-nums;} /* Una superficie: blanca, esquina generosa, un filo fin\xEDsimo y una sombra que casi no est\xE1. Sin sombra pesada y sin degradados decorativos \u2014 el relieve lo da el aire, no el efecto. */ .b-card{background:#fff;border-radius:18px;border:1px solid var(--b-hair);} .b-card-hover{transition:box-shadow .3s cubic-bezier(.2,.8,.3,1),transform .3s cubic-bezier(.2,.8,.3,1),border-color .3s;} .b-card-hover:hover{border-color:rgba(29,29,31,.28);box-shadow:0 8px 28px -14px rgba(0,0,0,.18);transform:translateY(-2px);} /* El resplandor del onboarding: una mancha enorme del acento, muy difuminada, detr\xE1s de todo. */ .b-glow{position:absolute;width:820px;height:820px;border-radius:50%;top:-400px;left:50%;transform:translateX(-50%);pointer-events:none;background:radial-gradient(circle,rgba(29,29,31,.055) 0%,rgba(29,29,31,.02) 40%,transparent 70%);filter:blur(80px);z-index:0;} /* La fila de pesta\xF1as de la 765/8: una sola l\xEDnea que se desliza, sin caja gris, y la activa marcada con su subrayado. El subrayado ocupa sitio tambi\xE9n cuando no est\xE1 activa, o la fila pega un salto de 2 px al cambiar. */ .b-tabs{display:flex;align-items:stretch;gap:4px;overflow-x:auto;border-bottom:1px solid var(--b-hair);scrollbar-width:none;-webkit-overflow-scrolling:touch;} .b-tabs::-webkit-scrollbar{display:none;} .b-tabs>button{flex-shrink:0;padding:9px 13px 10px;font-size:13.5px;letter-spacing:-.2px;color:var(--b-muted);background:transparent;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;white-space:nowrap;transition:color .2s;} .b-tabs>button[data-on="1"]{color:var(--b-ink);font-weight:600;border-bottom-color:var(--b-accent);} /* El men\xFA del usuario: panel anclado, sin velo \u2014 no es un di\xE1logo. */ .b-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:50;min-width:236px;background:#fff;border:1px solid var(--b-hair);border-radius:16px;box-shadow:0 14px 44px -12px rgba(0,0,0,.22);overflow:hidden;} .b-menu button{width:100%;display:flex;align-items:center;gap:9px;padding:10px 14px;font-size:13.5px;color:var(--b-ink);background:transparent;border:none;cursor:pointer;text-align:left;transition:background .18s;} .b-menu button:hover{background:#f6f6f7;} .b-input{width:100%;background:#fff;border:1px solid var(--b-hair);border-radius:14px;padding:13px 15px;font-size:15px;color:var(--b-ink);outline:none;transition:border-color .25s,box-shadow .25s;box-sizing:border-box;} .b-input::placeholder{color:var(--b-faint);} .b-input:focus{border-color:var(--b-accent);box-shadow:0 0 0 4px rgba(29,29,31,.10);} /* Pulsar: se hunde un pelo y vuelve. Lo mismo en bot\xF3n, tarjeta y pesta\xF1a. */ .b-press{transition:transform .3s cubic-bezier(.2,.8,.3,1),box-shadow .3s,opacity .25s,background .25s,border-color .25s;} .b-press:hover{transform:scale(1.015);} .b-press:active{transform:scale(.985);} .b-btn-grad{background:var(--b-grad);color:#fff;box-shadow:0 8px 30px -10px rgba(29,29,31,.55);} .b-btn-grad:hover{filter:saturate(1.05) brightness(1.04);} /* La superficie te\xF1ida del onboarding: fondo del acento al 5,5 % y un filo al 20 %. */ .b-soft{background:rgba(29,29,31,.055);border:1px solid rgba(29,29,31,.20);color:var(--b-accent);} .b-pill{display:inline-flex;align-items:center;gap:6px;border-radius:9999px;padding:5px 12px;font-size:12px;font-weight:600;line-height:1;white-space:nowrap;} .b-aura{position:absolute;inset:0;overflow:hidden;pointer-events:none;} .b-aura::before{content:"";position:absolute;width:560px;height:560px;top:-220px;right:-160px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.10),transparent 60%);} .b-aura::after{content:"";position:absolute;width:420px;height:420px;bottom:-190px;left:-130px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.06),transparent 62%);} @keyframes b-rise{from{opacity:0;transform:translateY(14px);}to{opacity:1;transform:translateY(0);}} @keyframes b-fade{from{opacity:0;}to{opacity:1;}} .b-rise{animation:b-rise .5s cubic-bezier(.2,.8,.3,1) both;} .b-fade{animation:b-fade .45s ease both;} /* Control segmentado, estilo iOS: la pastilla blanca se mueve, el resto es fondo. */ .b-seg{display:inline-flex;background:#eeeef0;border-radius:14px;padding:4px;gap:2px;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;} .b-seg::-webkit-scrollbar{display:none;} .b-seg>button{border:none;background:transparent;border-radius:10px;padding:8px 16px;font-size:13.5px;font-weight:600;color:var(--b-faint);cursor:pointer;white-space:nowrap;transition:background .25s,color .25s,box-shadow .25s;} .b-seg>button[data-on="1"]{background:#fff;color:var(--b-ink);box-shadow:0 1px 3px rgba(26,18,19,.12);} /* Una fila de tabla, cuando no hay tabla: en el m\xF3vil las filas son fichas. */ .b-row{background:#fff;border-radius:14px;padding:14px 15px;border:1px solid var(--b-hair);} .b-row+.b-row{margin-top:9px;} .b-kv{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:12.5px;line-height:1.9;} .b-kv>span:first-child{color:var(--b-faint);} .b-kv>span:last-child{color:var(--b-ink);font-weight:600;font-variant-numeric:tabular-nums;} /* El n\xFAmero de una secci\xF3n, como en su informe: un c\xEDrculo con el acento dentro. */ .b-step{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;height:28px;border-radius:10px;font-size:13.5px;font-weight:700;font-variant-numeric:tabular-nums;background:var(--b-grad);color:#fff;} /* \u2500\u2500\u2500\u2500\u2500 El portal (17-sep-2026): cabecera con men\xFA arriba, filtros como p\xEDldoras y hojas laterales \u2500\u2500\u2500\u2500\u2500 */ .p-shell{min-height:100vh;background:#f5f5f7;} /* La cabecera NO lleva backdrop-filter: crea bloque contenedor y la capa de \xABpulsa fuera\xBB de los men\xFAs dejar\xEDa de cubrir la pantalla. */ .p-head{position:sticky;top:0;z-index:30;background:#fff;border-bottom:1px solid var(--b-hair);} .p-head-in{max-width:1280px;margin:0 auto;padding:0 28px;height:60px;display:flex;align-items:center;gap:20px;} .p-brand{display:flex;align-items:center;gap:10px;flex-shrink:0;} .p-nav{display:flex;align-items:stretch;gap:2px;height:100%;flex:1;justify-content:center;} .p-nav>button{display:flex;align-items:center;gap:7px;padding:0 13px;font-size:14px;letter-spacing:-.2px;color:var(--b-muted);background:transparent;border:none;border-bottom:2px solid transparent;cursor:pointer;margin-bottom:-1px;white-space:nowrap;transition:color .2s;} .p-nav>button:hover{color:var(--b-ink);} .p-nav>button[data-on="1"]{color:var(--b-ink);font-weight:600;border-bottom-color:var(--b-accent);} .p-main{max-width:1280px;margin:0 auto;padding:22px 28px 72px;} .p-filtros{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:20px;} .p-pill{display:inline-flex;align-items:center;gap:7px;height:36px;padding:0 11px 0 14px;border-radius:999px;background:#fff;border:1px solid var(--b-hair);font-size:13.5px;color:var(--b-ink);cursor:pointer;max-width:100%;transition:border-color .2s,box-shadow .2s;} .p-pill:hover{border-color:#d2d2d7;} .p-pill[data-on="1"]{border-color:rgba(29,29,31,.45);box-shadow:0 0 0 3px rgba(29,29,31,.07);} .p-pill .k{color:var(--b-muted);} .p-pill .v{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:280px;} .p-veil{position:fixed;inset:0;z-index:45;} .p-pop{position:absolute;top:calc(100% + 8px);left:0;z-index:50;background:#fff;border:1px solid var(--b-hair);border-radius:16px;box-shadow:0 18px 50px -12px rgba(0,0,0,.25);min-width:280px;width:max-content;max-width:min(92vw,440px);overflow:hidden;animation:b-rise .22s cubic-bezier(.2,.8,.3,1) both;} .p-pop-list{max-height:360px;overflow-y:auto;padding:6px;} .p-opt{width:100%;display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;font-size:13.5px;color:var(--b-ink);background:transparent;border:none;cursor:pointer;text-align:left;} .p-opt:hover{background:#f5f5f7;} .p-opt[data-on="1"]{background:rgba(29,29,31,.06);color:var(--b-accent);font-weight:600;} .p-opt .s{margin-left:auto;font-size:12px;color:var(--b-faint);font-weight:400;} .p-grp{padding:10px 10px 4px;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--b-faint);} .p-search{display:flex;align-items:center;gap:8px;padding:11px 13px;border-bottom:1px solid var(--b-hair);} .p-search input{border:none;outline:none;font-size:14px;flex:1;min-width:0;background:transparent;color:var(--b-ink);} .p-card{background:#fff;border:1px solid var(--b-hair);border-radius:20px;} .p-card-h{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:18px 20px 0;} .p-card-h h3{font-size:16px;font-weight:600;letter-spacing:-.3px;color:var(--b-ink);} .p-card-h p{font-size:12.5px;color:var(--b-muted);margin-top:3px;} .p-grid{display:grid;gap:16px;} .p-g-2-1{grid-template-columns:minmax(0,2fr) minmax(0,1fr);} .p-g-2{grid-template-columns:repeat(2,minmax(0,1fr));} .p-g-3{grid-template-columns:repeat(3,minmax(0,1fr));} .p-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));} .p-stat{padding:18px 20px;} .p-stat+.p-stat{box-shadow:inset 1px 0 0 var(--b-hair);} .p-stat .l{font-size:12.5px;color:var(--b-muted);letter-spacing:-.1px;} .p-stat .v{font-size:24px;font-weight:600;letter-spacing:-.7px;font-variant-numeric:tabular-nums;margin-top:5px;color:var(--b-ink);line-height:1.1;} .p-stat .s{font-size:12px;color:var(--b-faint);margin-top:4px;} .p-table{width:100%;border-collapse:collapse;} .p-table th{padding:10px 14px;font-size:11.5px;font-weight:600;color:var(--b-muted);text-align:left;white-space:nowrap;border-bottom:1px solid var(--b-hair);background:#fff;position:sticky;top:0;z-index:1;cursor:default;user-select:none;} .p-table th[data-r="1"],.p-table td[data-r="1"]{text-align:right;} .p-table th[data-sort]{cursor:pointer;} .p-table th[data-sort]:hover{color:var(--b-ink);} .p-table td{padding:11px 14px;font-size:13.5px;color:var(--b-ink);border-bottom:1px solid #f0f0f2;white-space:nowrap;font-variant-numeric:tabular-nums;} .p-table tbody tr:last-child td{border-bottom:none;} .p-table tfoot td{font-weight:600;border-top:1px solid var(--b-hair);border-bottom:none;background:#fafafa;} .p-click{cursor:pointer;transition:background .15s;} .p-click:hover{background:#fafafb;} .p-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:34px;padding:0 13px;border-radius:10px;border:1px solid var(--b-hair);background:#fff;font-size:13px;font-weight:600;color:var(--b-ink);cursor:pointer;white-space:nowrap;transition:border-color .2s,background .2s,opacity .2s;} .p-btn:hover{border-color:#c9c9ce;} .p-btn:disabled{opacity:.55;cursor:default;} .p-btn-a{background:var(--b-accent);border-color:var(--b-accent);color:#fff;} .p-btn-a:hover{background:#6a1a22;border-color:#6a1a22;} .p-btn-s{height:28px;padding:0 10px;border-radius:8px;font-size:12.5px;} .p-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0;} .p-note{font-size:12.5px;color:var(--b-muted);display:flex;align-items:center;gap:6px;} .p-veil-dark{position:fixed;inset:0;background:rgba(20,20,22,.32);z-index:60;animation:b-fade .2s ease both;} .p-drawer{position:fixed;top:0;right:0;bottom:0;width:min(460px,100vw);background:#fff;z-index:61;box-shadow:-24px 0 60px -24px rgba(0,0,0,.35);display:flex;flex-direction:column;animation:p-in .34s cubic-bezier(.32,.72,0,1) both;} .p-drawer-h{display:flex;align-items:flex-start;gap:12px;padding:20px 22px 16px;border-bottom:1px solid var(--b-hair);} .p-drawer-b{flex:1;overflow-y:auto;padding:18px 22px 28px;} .p-kv{display:flex;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid #f0f0f2;font-size:13.5px;} .p-kv:last-child{border-bottom:none;} .p-kv>span:first-child{color:var(--b-muted);} .p-kv>span:last-child{color:var(--b-ink);font-weight:500;text-align:right;font-variant-numeric:tabular-nums;} .p-sec{font-size:11.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--b-faint);margin:20px 0 6px;} .p-seg{display:inline-flex;background:#ebebed;border-radius:10px;padding:3px;gap:2px;} .p-seg>button{border:none;background:transparent;border-radius:8px;padding:6px 12px;font-size:13px;font-weight:600;color:var(--b-muted);cursor:pointer;white-space:nowrap;} .p-seg>button[data-on="1"]{background:#fff;color:var(--b-ink);box-shadow:0 1px 2px rgba(0,0,0,.12);} .p-tabbar{display:none;} .p-empty{padding:56px 20px;text-align:center;color:var(--b-muted);font-size:14px;} .p-empty b{display:block;color:var(--b-ink);font-size:15px;font-weight:600;margin-bottom:4px;} @keyframes p-in{from{transform:translateX(28px);opacity:0}to{transform:none;opacity:1}} @keyframes p-up{from{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}} .p-only-m{display:none;} @media (max-width: 900px){ .p-nav{display:none;} .p-tabbar{display:flex;position:fixed;bottom:0;left:0;right:0;z-index:40;background:#fff;border-top:1px solid var(--b-hair);padding:6px 4px calc(6px + env(safe-area-inset-bottom));justify-content:space-around;} .p-tabbar>button{display:flex;flex-direction:column;align-items:center;gap:2px;background:transparent;border:none;color:var(--b-faint);font-size:10.5px;padding:2px 6px;cursor:pointer;} .p-tabbar>button[data-on="1"]{color:var(--b-accent);font-weight:600;} .p-main{padding:16px 16px 100px;} .p-head-in{padding:0 16px;height:54px;} .p-g-2-1,.p-g-2,.p-g-3{grid-template-columns:minmax(0,1fr);} .p-stats{grid-template-columns:repeat(2,minmax(0,1fr));} .p-stat:nth-child(odd){box-shadow:none;} .p-stat:nth-child(n+3){box-shadow:inset 0 1px 0 var(--b-hair);} .p-stat:nth-child(4){box-shadow:inset 1px 0 0 var(--b-hair),inset 0 1px 0 var(--b-hair);} .p-stat{padding:14px 16px;} .p-stat .v{font-size:20px;} .p-drawer{top:auto;left:0;width:100%;max-height:90vh;border-radius:22px 22px 0 0;animation:p-up .34s cubic-bezier(.32,.72,0,1) both;} .p-pill .v{max-width:170px;} .p-only-d{display:none;} .p-only-m{display:block;} } `,money0=n=>new Intl.NumberFormat("es-ES",{style:"currency",currency:"EUR",maximumFractionDigits:0}).format(Number(n)||0),money2=n=>new Intl.NumberFormat("es-ES",{style:"currency",currency:"EUR",minimumFractionDigits:2,maximumFractionDigits:2}).format(Number(n)||0),num=n=>new Intl.NumberFormat("es-ES").format(Number(n)||0),pct=n=>n==null?"\u2014":new Intl.NumberFormat("es-ES",{minimumFractionDigits:0,maximumFractionDigits:1}).format(Number(n))+" %",fmtDate=s=>{if(!s)return"\u2014";let d2=new Date(s);return isNaN(d2)?"\u2014":d2.toLocaleDateString("es-ES",{day:"2-digit",month:"short",year:"numeric"})},fmtDia=s=>{if(!s)return"\u2014";let d2=new Date(s+"T12:00:00");return isNaN(d2)?"\u2014":d2.toLocaleDateString("es-ES",{weekday:"short",day:"2-digit",month:"short"})},dmyCSV=s=>{let m=String(s||"").match(/^(\d{4})-(\d{2})-(\d{2})/);return m?m[3]+"/"+m[2]+"/"+m[1]:String(s||"")},MES=["","Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],mesLabel=ym=>{if(!ym)return ym;let[y,m]=ym.split("-");return`${MES[parseInt(m,10)]} ${y}`},initials=n=>String(n||"?").trim().split(/\s+/).filter(w=>/\p{L}/u.test(w[0])).slice(0,2).map(w=>w[0]).join("").toUpperCase(),eurCSV=n=>String((Number(n)||0).toFixed(2)).replace(".",","),ESTADO={accepted:{t:"Confirmada",c:B.green},pending:{t:"Pendiente",c:B.amber},inquiry:{t:"Consulta",c:"#2563eb"},cancelled:{t:"Cancelada",c:B.red},denied:{t:"Denegada",c:B.muted},expired:{t:"Expirada",c:B.muted},preapproved:{t:"Pre-aprob.",c:"#2563eb"},incomplete:{t:"Incompleta",c:B.muted},no_show:{t:"No-show",c:B.red}},estadoInfo=e=>ESTADO[e]||{t:e||"\u2014",c:B.muted},HOSTELWORLD="Hostelworld",esHW=r=>String(r&&r.confirmation_code||"").startsWith("HWG-"),canalDe=(canal,hw)=>hw?HOSTELWORLD:canal==="Direct"?"Directo":canal||"\u2014",CANAL={Airbnb:"#ff385c",Booking:"#003580","Booking.com":"#003580",Hostelworld:"#e8592b",Vrbo:"#1e6091",Direct:B.green,Directo:B.green,Otro:B.muted},canalColor=c=>CANAL[c]||B.muted,CHARGE={captured:{t:"Cobrado",c:B.green},pending:{t:"Pendiente",c:B.amber},failed:{t:"Fallido",c:B.red},refunded:{t:"Devuelto",c:B.muted},partially_refunded:{t:"Dev. parcial",c:B.amber},terminated:{t:"Terminado",c:B.muted}},chargeInfo=s=>CHARGE[s]||{t:s||"\u2014",c:B.muted},RE_HAB=/\bH\d+\s+[A-ZÁÉÍÓÚÑ]+/,habitacionDe=nick=>{let m=RE_HAB.exec(String(nick||""));return m?m[0].replace(/\s+/g," "):null},unidadDe=nick=>{let limpio=String(nick||"").replace(/\s+-\s+[A-Za-z.]+\s*$/,"").trim();if(!limpio)return"\u2014";let hab=habitacionDe(limpio);if(!hab)return limpio;let cod=(limpio.match(/^(\S+)/)||[])[1];return cod&&cod!==hab.split(" ")[0]?`${cod} \xB7 ${hab}`:hab};function downloadCSV(filename,rows){let esc=v=>{let s=String(v??"");return/[";\n\r]/.test(s)?'"'+s.replace(/"/g,'""')+'"':s},csv="\uFEFF"+rows.map(r=>r.map(esc).join(";")).join(`\r `),url=URL.createObjectURL(new Blob([csv],{type:"text/csv;charset=utf-8;"})),a=document.createElement("a");a.href=url,a.download=filename,document.body.appendChild(a),a.click(),setTimeout(()=>{document.body.removeChild(a),URL.revokeObjectURL(url)},120)}function useIsMobile(bp){let q=`(max-width: ${bp||767}px)`,[movil,setMovil]=(0,import_react.useState)(()=>typeof window>"u"?!1:window.matchMedia(q).matches);return(0,import_react.useEffect)(()=>{if(typeof window>"u")return;let mq=window.matchMedia(q),on=e=>setMovil(e.matches);return setMovil(mq.matches),mq.addEventListener("change",on),()=>mq.removeEventListener("change",on)},[q]),movil}var tintaOcup=p=>p==null?B.faint:p>55?"#fff":B.ink,fondoOcup=p=>p==null||p<=0?"#f4f0f0":`rgba(29,29,31,${(Number(.1+Math.min(100,p)/100*.9)||0).toFixed(3)})`,Badge=({text,color})=>__gh("span",{className:"b-pill",style:{color,background:`${color}16`,boxShadow:`inset 0 0 0 1px ${color}2a`},"data-gufi-src":"ui.tsx:321"},text),SecTitle=({children,right,sub})=>__gh("div",{className:"flex items-center justify-between gap-3 px-4 sm:px-5 py-3.5","data-gufi-src":"ui.tsx:323"},__gh("div",{"data-gufi-src":"ui.tsx:324"},__gh("div",{className:"text-[15px] font-bold",style:{color:B.ink},"data-gufi-src":"ui.tsx:325"},children),sub?__gh("div",{className:"text-[12px] mt-0.5",style:{color:B.faint},"data-gufi-src":"ui.tsx:326"},sub):null),right||null),Empty=({text})=>__gh("div",{className:"py-12 text-center text-sm",style:{color:B.muted},"data-gufi-src":"ui.tsx:331"},text);function KPI({label,value,sub,accent}){return __gh("div",{className:"b-card relative overflow-hidden p-4 sm:p-5","data-gufi-src":"ui.tsx:334"},__gh("div",{className:"text-[10.5px] sm:text-[11px] font-semibold uppercase tracking-[.06em]",style:{color:B.faint},"data-gufi-src":"ui.tsx:335"},label),__gh("div",{className:"mt-2 text-[22px] sm:text-[30px] font-semibold leading-none b-num",style:{color:accent||B.ink,letterSpacing:"-.035em"},"data-gufi-src":"ui.tsx:336"},value),sub?__gh("div",{className:"mt-1.5 text-[11.5px] sm:text-[12px]",style:{color:B.faint},"data-gufi-src":"ui.tsx:337"},sub):null)}var Th=({children,r})=>__gh("th",{className:"px-3 sm:px-4 py-2.5 text-[11px] font-bold uppercase tracking-wide whitespace-nowrap "+(r?"text-right":"text-left"),style:{color:B.faint,borderBottom:`1px solid ${B.hair}`},"data-gufi-src":"ui.tsx:341"},children),STICKY={position:"sticky",right:0,background:B.card,zIndex:2,boxShadow:`inset 1px 0 0 ${B.hair}`},Td=({children,r,b,sticky})=>__gh("td",{className:"px-3 sm:px-4 py-3 text-[13.5px] whitespace-nowrap "+(r?"text-right":"text-left")+(b?" font-semibold":""),style:{color:B.ink,borderBottom:`1px solid ${B.hair}`,...sticky?STICKY:null},"data-gufi-src":"ui.tsx:346"},children),TableWrap=({children,min})=>__gh("div",{className:"overflow-x-auto","data-gufi-src":"ui.tsx:347"},__gh("table",{className:"w-full border-collapse",style:{minWidth:min||640},"data-gufi-src":"ui.tsx:347"},children)),Spin=()=>__gh("div",{className:"flex justify-center py-14","data-gufi-src":"ui.tsx:348"},__gh(import_lucide_react.Loader2,{className:"animate-spin",style:{color:B.accent}})),Seg=({value,onChange,options})=>__gh("div",{className:"b-seg","data-gufi-src":"ui.tsx:350"},options.map(([k,l])=>__gh("button",{key:k,"data-on":value===k?"1":"0",onClick:()=>onChange(k),"data-gufi-src":"ui.tsx:351"},l)));function FChip({active,onClick,color,children}){return __gh("button",{onClick,className:"b-press",style:{padding:"6px 12px",borderRadius:999,fontSize:12.5,fontWeight:600,cursor:"pointer",border:`1px solid ${active?color||B.accent:B.hair}`,background:active?`${color||B.accent}14`:"#fff",color:active?color||B.accent:B.muted,whiteSpace:"nowrap"},"data-gufi-src":"ui.tsx:355"},children)}var Tabs=({value,onChange,options})=>__gh("div",{className:"b-tabs mb-5","data-gufi-src":"ui.tsx:360"},options.map(([k,l])=>__gh("button",{key:k,"data-on":value===k?"1":"0",onClick:()=>onChange(k),"data-gufi-src":"ui.tsx:361"},l))),Bloque=({n,titulo,sub,icono:Icono})=>__gh("div",{className:"flex items-center gap-3 mb-4 mt-1","data-gufi-src":"ui.tsx:368"},n!=null?__gh("div",{className:"b-step","data-gufi-src":"ui.tsx:370"},n):__gh("div",{className:"flex h-[30px] w-[30px] items-center justify-center rounded-[11px] shrink-0 b-soft","data-gufi-src":"ui.tsx:371"},Icono?__gh(Icono,{size:15}):null),__gh("div",{className:"leading-tight","data-gufi-src":"ui.tsx:372"},__gh("div",{className:"text-[17px] sm:text-[18px] font-semibold",style:{color:B.ink,letterSpacing:"-.03em"},"data-gufi-src":"ui.tsx:373"},titulo),sub?__gh("div",{className:"text-[12.5px] mt-0.5",style:{color:B.faint},"data-gufi-src":"ui.tsx:374"},sub):null));function PorCanal({filas,total,movil}){let arr=(0,import_react.useMemo)(()=>filas.map(f=>({nombre:canalDe(f.canal,f.hw),noches:f.noches,recaudacion:f.recaudacion,tuyo:f.tuyo,comision:Math.round((f.recaudacion-f.tuyo)*100)/100,pctCom:f.recaudacion?(f.recaudacion-f.tuyo)/f.recaudacion*100:0,peso:total?f.recaudacion/total*100:0})).sort((a,b)=>b.recaudacion-a.recaudacion),[filas,total]);return arr.length?__gh("div",{className:"b-card overflow-hidden mb-7","data-gufi-src":"ui.tsx:393"},__gh(SecTitle,{sub:"cu\xE1nto cobra el hu\xE9sped cada canal, qu\xE9 se queda de comisi\xF3n y qu\xE9 te llega"},"De d\xF3nde viene"),movil?__gh("div",{className:"px-4 pb-4","data-gufi-src":"ui.tsx:396"},arr.map(c=>__gh("div",{key:c.nombre,className:"b-row","data-gufi-src":"ui.tsx:398"},__gh("div",{className:"flex items-baseline justify-between gap-3 mb-2","data-gufi-src":"ui.tsx:399"},__gh("span",{className:"text-[14px] font-semibold",style:{color:canalColor(c.nombre)},"data-gufi-src":"ui.tsx:400"},c.nombre),__gh("span",{className:"text-[14px] font-semibold b-num",style:{color:B.ink},"data-gufi-src":"ui.tsx:401"},money2(c.recaudacion))),__gh("div",{className:"rounded-lg h-1.5 mb-2.5 overflow-hidden",style:{background:"#f1f1f2"},"data-gufi-src":"ui.tsx:403"},__gh("div",{style:{width:`${Math.min(100,c.peso)}%`,height:"100%",background:canalColor(c.nombre)},"data-gufi-src":"ui.tsx:404"})),__gh("div",{className:"b-kv","data-gufi-src":"ui.tsx:406"},__gh("span",{"data-gufi-src":"ui.tsx:406"},"Peso"),__gh("span",{"data-gufi-src":"ui.tsx:406"},pct(c.peso)," \xB7 ",num(c.noches)," noches")),__gh("div",{className:"b-kv","data-gufi-src":"ui.tsx:407"},__gh("span",{"data-gufi-src":"ui.tsx:407"},"Comisi\xF3n"),__gh("span",{style:{color:c.comision>0?B.red:B.green},"data-gufi-src":"ui.tsx:407"},money2(c.comision)," \xB7 ",pct(c.pctCom))),__gh("div",{className:"b-kv","data-gufi-src":"ui.tsx:408"},__gh("span",{"data-gufi-src":"ui.tsx:408"},"Tu ingreso"),__gh("span",{style:{color:B.green},"data-gufi-src":"ui.tsx:408"},money2(c.tuyo)))))):__gh(TableWrap,{min:700},__gh("thead",{"data-gufi-src":"ui.tsx:414"},__gh("tr",{"data-gufi-src":"ui.tsx:414"},__gh(Th,null,"Canal"),__gh(Th,{r:!0},"Noches"),__gh(Th,{r:!0},"Cobra el hu\xE9sped"),__gh(Th,{r:!0},"Comisi\xF3n"),__gh(Th,{r:!0},"%"),__gh(Th,{r:!0},"Tu ingreso"),__gh(Th,null,"Peso"))),__gh("tbody",{"data-gufi-src":"ui.tsx:415"},arr.map(c=>__gh("tr",{key:c.nombre,"data-gufi-src":"ui.tsx:417"},__gh(Td,{b:!0},__gh("span",{style:{color:canalColor(c.nombre)},"data-gufi-src":"ui.tsx:418"},c.nombre)),__gh(Td,{r:!0},num(c.noches)),__gh(Td,{r:!0},money2(c.recaudacion)),__gh(Td,{r:!0},c.comision>0?__gh("span",{style:{color:B.red},"data-gufi-src":"ui.tsx:421"},"\u2212",money2(c.comision)):__gh("span",{style:{color:B.faint},"data-gufi-src":"ui.tsx:421"},"\u2014")),__gh(Td,{r:!0},c.comision>0?pct(c.pctCom):__gh("span",{style:{color:B.faint},"data-gufi-src":"ui.tsx:422"},"\u2014")),__gh(Td,{r:!0,b:!0},__gh("span",{style:{color:B.green},"data-gufi-src":"ui.tsx:423"},money2(c.tuyo))),__gh(Td,null,__gh("div",{className:"flex items-center gap-2","data-gufi-src":"ui.tsx:425"},__gh("div",{className:"rounded-full h-1.5 flex-1 overflow-hidden",style:{background:"#f1f1f2",minWidth:70},"data-gufi-src":"ui.tsx:426"},__gh("div",{style:{width:`${Math.min(100,c.peso)}%`,height:"100%",background:canalColor(c.nombre)},"data-gufi-src":"ui.tsx:427"})),__gh("span",{className:"b-num font-semibold",style:{color:B.muted,width:50,textAlign:"right"},"data-gufi-src":"ui.tsx:429"},pct(c.peso))))))))):null}var tsOf=s=>{if(!s)return null;let d2=new Date(s);return isNaN(d2.getTime())?null:d2.getTime()};function useSort(){let[sort,setSort]=(0,import_react.useState)(null),toggle=(0,import_react.useCallback)(key=>setSort(s=>s&&s.key===key?{key,dir:s.dir==="asc"?"desc":"asc"}:{key,dir:"asc"}),[]);return[sort,toggle]}function applySort(rows,sort,accessors){if(!sort||!accessors[sort.key])return rows;let get=accessors[sort.key],dir=sort.dir==="asc"?1:-1,isEmpty=v=>v==null||v==="";return[...rows].sort((a,b)=>{let va=get(a),vb=get(b),ea=isEmpty(va),eb=isEmpty(vb);return ea&&eb?0:ea?1:eb?-1:(typeof va=="number"&&typeof vb=="number"?va-vb:String(va).localeCompare(String(vb),"es",{numeric:!0,sensitivity:"base"}))*dir})}var SortTh=({children,r,sortKey,sort,onSort,sticky})=>{let active=sort&&sort.key===sortKey;return __gh("th",{onClick:()=>onSort(sortKey),className:"px-3 sm:px-4 py-2.5 text-[11px] font-bold uppercase tracking-wide whitespace-nowrap cursor-pointer "+(r?"text-right":"text-left"),style:{color:active?B.accent:B.faint,borderBottom:`1px solid ${B.hair}`,userSelect:"none",WebkitUserSelect:"none",...sticky?{...STICKY,zIndex:3}:null},"data-gufi-src":"ui.tsx:466"},children,__gh("span",{style:{fontSize:9,marginLeft:4,opacity:active?1:.4},"data-gufi-src":"ui.tsx:468"},active?sort.dir==="asc"?"\u25B2":"\u25BC":"\u2195"))},moneyK=n=>new Intl.NumberFormat("es-ES",{notation:"compact",maximumFractionDigits:1}).format(Number(n)||0)+" \u20AC",fmtLarga=s=>{if(!s)return"\u2014";let d2=new Date(String(s).slice(0,10)+"T12:00:00");return isNaN(d2)?"\u2014":d2.toLocaleDateString("es-ES",{day:"numeric",month:"short",year:"numeric"}).replace(".","")},MES_CORTO=["","ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],mesCorto=ym=>MES_CORTO[parseInt(String(ym).slice(5,7),10)]||ym,sumarDias=(ymd3,n)=>new Date(Date.parse(ymd3+"T00:00:00Z")+n*864e5).toISOString().slice(0,10),primeroMesSiguiente=ym=>{let[y,m]=ym.split("-").map(Number);return new Date(Date.UTC(y,m,1)).toISOString().slice(0,10)};function periodoTexto(desde,hasta){if(!desde||!hasta)return"";let[y1,m1,d1]=desde.split("-").map(Number),fin=sumarDias(hasta,-1),[y2,m2,d2]=fin.split("-").map(Number),ultimo=new Date(Date.UTC(y2,m2,0)).getUTCDate();return d1===1&&d2===ultimo?y1===y2&&m1===1&&m2===12?`A\xF1o ${y1}`:y1===y2&&m1===m2?`${MES[m1]} ${y1}`:y1===y2&&m2-m1===2&&(m1-1)%3===0?`T${(m1+2)/3} ${y1}`:`${MES[m1]}${y1!==y2?" "+y1:""} \u2013 ${MES[m2]} ${y2}`:`${fmtLarga(desde)} \u2013 ${fmtLarga(fin)}`}var PAISES={Spain:"Espa\xF1a","United States":"Estados Unidos","United States of America":"Estados Unidos","United Kingdom":"Reino Unido",France:"Francia",Germany:"Alemania",Italy:"Italia",Portugal:"Portugal",Netherlands:"Pa\xEDses Bajos",Belgium:"B\xE9lgica",Switzerland:"Suiza",Austria:"Austria",Ireland:"Irlanda",Sweden:"Suecia",Norway:"Noruega",Denmark:"Dinamarca",Finland:"Finlandia",Poland:"Polonia","Czech Republic":"Chequia",Czechia:"Chequia",Hungary:"Hungr\xEDa",Romania:"Ruman\xEDa",Bulgaria:"Bulgaria",Greece:"Grecia",Croatia:"Croacia",Slovakia:"Eslovaquia",Slovenia:"Eslovenia",Serbia:"Serbia",Ukraine:"Ucrania","Russian Federation":"Rusia",Russia:"Rusia",Turkey:"Turqu\xEDa",T\u00FCrkiye:"Turqu\xEDa",Israel:"Israel",Mexico:"M\xE9xico",Argentina:"Argentina",Brazil:"Brasil",Chile:"Chile",Colombia:"Colombia",Peru:"Per\xFA",Uruguay:"Uruguay",Paraguay:"Paraguay",Ecuador:"Ecuador","Bolivia, Plurinational State of":"Bolivia",Bolivia:"Bolivia","Venezuela, Bolivarian Republic of":"Venezuela",Venezuela:"Venezuela","Costa Rica":"Costa Rica",Panama:"Panam\xE1",Guatemala:"Guatemala",Honduras:"Honduras","El Salvador":"El Salvador",Nicaragua:"Nicaragua",Cuba:"Cuba","Dominican Republic":"Rep\xFAblica Dominicana","Puerto Rico":"Puerto Rico",Canada:"Canad\xE1",Australia:"Australia","New Zealand":"Nueva Zelanda",China:"China",Japan:"Jap\xF3n","Korea, Republic of":"Corea del Sur","South Korea":"Corea del Sur",India:"India",Philippines:"Filipinas",Singapore:"Singapur",Taiwan:"Taiw\xE1n","Taiwan, Province of China":"Taiw\xE1n","Hong Kong":"Hong Kong",Thailand:"Tailandia",Vietnam:"Vietnam","Viet Nam":"Vietnam",Indonesia:"Indonesia",Malaysia:"Malasia",Morocco:"Marruecos",Algeria:"Argelia",Egypt:"Egipto","South Africa":"Sud\xE1frica",Nigeria:"Nigeria","United Arab Emirates":"Emiratos \xC1rabes Unidos","Saudi Arabia":"Arabia Saud\xED",Qatar:"Catar",Lebanon:"L\xEDbano",Luxembourg:"Luxemburgo",Iceland:"Islandia",Estonia:"Estonia",Latvia:"Letonia",Lithuania:"Lituania",Andorra:"Andorra",Malta:"Malta",Cyprus:"Chipre",Georgia:"Georgia",Armenia:"Armenia",Kazakhstan:"Kazajist\xE1n",Pakistan:"Pakist\xE1n"},paisEs=p=>p?PAISES[p]||p:"\u2014";function descargarPdfBase64(b64,filename){let bin=atob(b64),bytes=new Uint8Array(bin.length);for(let i=0;i{document.body.removeChild(a),URL.revokeObjectURL(url)},150)}function Desplegable({boton,children,abierto,setAbierto,derecha}){return __gh("div",{style:{position:"relative"},"data-gufi-src":"ui.tsx:539"},boton,abierto?__gh("div",{className:"p-veil",onClick:()=>setAbierto(!1),"data-gufi-src":"ui.tsx:541"}):null,abierto?__gh("div",{className:"p-pop",style:derecha?{left:"auto",right:0}:void 0,"data-gufi-src":"ui.tsx:542"},children):null)}var Pildora=({etiqueta,valor,activa,onClick})=>__gh("button",{className:"p-pill","data-on":activa?"1":"0",onClick,"data-gufi-src":"ui.tsx:548"},etiqueta?__gh("span",{className:"k","data-gufi-src":"ui.tsx:549"},etiqueta):null,__gh("span",{className:"v","data-gufi-src":"ui.tsx:550"},valor),__gh("svg",{width:"12",height:"12",viewBox:"0 0 12 12",style:{flexShrink:0,color:B.faint},"data-gufi-src":"ui.tsx:551"},__gh("path",{d:"M3 4.5 6 7.5 9 4.5",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","data-gufi-src":"ui.tsx:551"})));function ListaBuscable({opciones,valor,onElegir,placeholder}){let[q,setQ]=(0,import_react.useState)(""),norm=s=>String(s||"").normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase(),vis=(0,import_react.useMemo)(()=>{let n=norm(q);return n?opciones.filter(o=>norm(o.t+" "+(o.s||"")).includes(n)):opciones},[q,opciones]),grupo=null;return __gh(__gf,null,opciones.length>8?__gh("div",{className:"p-search","data-gufi-src":"ui.tsx:565"},__gh("svg",{width:"15",height:"15",viewBox:"0 0 16 16",style:{color:B.faint,flexShrink:0},"data-gufi-src":"ui.tsx:566"},__gh("circle",{cx:"7",cy:"7",r:"5",fill:"none",stroke:"currentColor",strokeWidth:"1.6","data-gufi-src":"ui.tsx:566"}),__gh("path",{d:"m11 11 3 3",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round","data-gufi-src":"ui.tsx:566"})),__gh("input",{autoFocus:!0,value:q,onChange:e=>setQ(e.target.value),placeholder:placeholder||"Buscar","data-gufi-src":"ui.tsx:567"})):null,__gh("div",{className:"p-pop-list","data-gufi-src":"ui.tsx:570"},vis.length?vis.map(o=>{let cab=o.g&&o.g!==grupo?grupo=o.g:null;return __gh(import_react.default.Fragment,{key:String(o.v)},cab?__gh("div",{className:"p-grp","data-gufi-src":"ui.tsx:575"},cab):null,__gh("button",{className:"p-opt","data-on":String(valor)===String(o.v)?"1":"0",onClick:()=>onElegir(o.v),"data-gufi-src":"ui.tsx:576"},__gh("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"data-gufi-src":"ui.tsx:577"},o.t),o.s?__gh("span",{className:"s","data-gufi-src":"ui.tsx:578"},o.s):null))}):__gh("div",{style:{padding:"16px 12px",fontSize:13,color:B.muted},"data-gufi-src":"ui.tsx:582"},"Nada coincide con \xAB",q,"\xBB.")))}var Cifra=({l,v,s,color})=>__gh("div",{className:"p-stat","data-gufi-src":"ui.tsx:589"},__gh("div",{className:"l","data-gufi-src":"ui.tsx:590"},l),__gh("div",{className:"v",style:color?{color}:void 0,"data-gufi-src":"ui.tsx:591"},v),s?__gh("div",{className:"s","data-gufi-src":"ui.tsx:592"},s):null),Vacio=({titulo,texto})=>__gh("div",{className:"p-empty","data-gufi-src":"ui.tsx:596"},__gh("b",{"data-gufi-src":"ui.tsx:596"},titulo),texto);function Hoja({titulo,sub,onClose,children,pie}){return(0,import_react.useEffect)(()=>{let onKey=e=>{e.key==="Escape"&&onClose()};return window.addEventListener("keydown",onKey),()=>window.removeEventListener("keydown",onKey)},[onClose]),__gh(__gf,null,__gh("div",{className:"p-veil-dark",onClick:onClose,"data-gufi-src":"ui.tsx:606"}),__gh("aside",{className:"p-drawer",role:"dialog","aria-modal":"true","data-gufi-src":"ui.tsx:607"},__gh("div",{className:"p-drawer-h","data-gufi-src":"ui.tsx:608"},__gh("div",{style:{minWidth:0,flex:1},"data-gufi-src":"ui.tsx:609"},__gh("div",{style:{fontSize:19,fontWeight:600,letterSpacing:"-.4px",color:B.ink,lineHeight:1.2},"data-gufi-src":"ui.tsx:610"},titulo),sub?__gh("div",{style:{fontSize:13,color:B.muted,marginTop:4},"data-gufi-src":"ui.tsx:611"},sub):null),__gh("button",{onClick:onClose,"aria-label":"Cerrar",className:"p-btn p-btn-s",style:{width:30,padding:0,borderRadius:999},"data-gufi-src":"ui.tsx:613"},__gh("svg",{width:"12",height:"12",viewBox:"0 0 12 12","data-gufi-src":"ui.tsx:614"},__gh("path",{d:"M2.5 2.5l7 7m0-7-7 7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round","data-gufi-src":"ui.tsx:614"})))),__gh("div",{className:"p-drawer-b","data-gufi-src":"ui.tsx:617"},children),pie?__gh("div",{style:{padding:"14px 22px",borderTop:`1px solid ${B.hair}`},"data-gufi-src":"ui.tsx:618"},pie):null))}function Pagina({titulo,sub,onVolver,accion,children}){return(0,import_react.useEffect)(()=>{let col=document.querySelector("[data-gufi-main-scroll]");col?col.scrollTop=0:window.scrollTo({top:0})},[]),(0,import_react.useEffect)(()=>{let onKey=e=>{e.key==="Escape"&&onVolver()};return window.addEventListener("keydown",onKey),()=>window.removeEventListener("keydown",onKey)},[onVolver]),__gh("div",{className:"b-fade","data-gufi-src":"ui.tsx:649"},__gh("div",{style:{display:"flex",alignItems:"flex-start",gap:12,marginBottom:14},"data-gufi-src":"ui.tsx:650"},__gh("button",{className:"p-btn p-btn-s",onClick:onVolver,"aria-label":"Volver",style:{width:32,padding:0,borderRadius:999,flex:"0 0 auto",marginTop:3},"data-gufi-src":"ui.tsx:651"},__gh("svg",{width:"13",height:"13",viewBox:"0 0 12 12",fill:"none","data-gufi-src":"ui.tsx:653"},__gh("path",{d:"M7.5 2 3.5 6l4 4",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round","data-gufi-src":"ui.tsx:653"}))),__gh("div",{style:{minWidth:0,flex:1},"data-gufi-src":"ui.tsx:655"},__gh("div",{style:{fontSize:20,fontWeight:600,letterSpacing:"-.4px",color:B.ink,lineHeight:1.2},"data-gufi-src":"ui.tsx:656"},titulo),sub?__gh("div",{style:{fontSize:13,color:B.muted,marginTop:3},"data-gufi-src":"ui.tsx:657"},sub):null),accion||null),__gh("div",{className:"p-card",style:{padding:"6px 18px 20px",maxWidth:780},"data-gufi-src":"ui.tsx:661"},children))}function useOrden(inicial){let[orden,setOrden]=(0,import_react.useState)(inicial||null),pulsar=(0,import_react.useCallback)(k=>setOrden(o=>o&&o.k===k?{k,asc:!o.asc}:{k,asc:!1}),[]);return{orden,th:k=>({"data-sort":k,onClick:()=>pulsar(k)}),flecha:k=>orden&&orden.k===k?orden.asc?" \u2191":" \u2193":""}}function ordenar(filas,orden,acceso){if(!orden)return filas;let get=acceso[orden.k];if(!get)return filas;let dir=orden.asc?1:-1;return[...filas].sort((a,b)=>{let x=get(a),y=get(b);return x==null&&y==null?0:x==null?1:y==null?-1:(typeof x=="number"&&typeof y=="number"?x-y:String(x).localeCompare(String(y),"es",{numeric:!0}))*dir})}function useScript(api,nombre,input,activo){let clave=activo?nombre+JSON.stringify(input):null,[st,setSt]=(0,import_react.useState)({clave:null,datos:null,error:""});(0,import_react.useEffect)(()=>{if(!clave||st.clave===clave)return;let vivo=!0;return setSt({clave,datos:null,error:""}),api(nombre,input).then(d2=>{vivo&&setSt({clave,datos:d2,error:""})}).catch(e=>{vivo&&setSt({clave,datos:null,error:String(e&&e.message||e)})}),()=>{vivo=!1}},[clave]);let mio=st.clave===clave;return{datos:mio?st.datos:null,error:mio?st.error:"",cargando:!!clave&&(!mio||!st.datos&&!st.error)}}var import_react2=require("react"),import_lucide_react2=require("lucide-react");function Estado({f,periodo,hijos}){return f.error?__gh("div",{className:"p-card","data-gufi-src":"resumen.tsx:10"},__gh(Vacio,{titulo:"No se han podido cargar los datos",texto:f.error})):f.cargando||!f.datos?__gh("div",{className:"p-card",style:{padding:70,display:"flex",justifyContent:"center"},"data-gufi-src":"resumen.tsx:11"},__gh(import_lucide_react2.Loader2,{className:"animate-spin",style:{color:B.accent}})):f.datos.demasiadas?__gh("div",{className:"p-card","data-gufi-src":"resumen.tsx:12"},__gh(Vacio,{titulo:"Demasiadas estancias para verlas de una vez",texto:`${periodoTexto(periodo.desde,periodo.hasta)} son ${num(f.datos.demasiadas)} registros de toda la cartera. Elige un propietario o un periodo m\xE1s corto.`})):!f.datos.totales||!f.datos.estancias.length&&!f.datos.totales.facturado?__gh("div",{className:"p-card","data-gufi-src":"resumen.tsx:13"},__gh(Vacio,{titulo:`${deFactura()?"Nada facturado":"Ninguna reserva"} en ${periodoTexto(periodo.desde,periodo.hasta).toLowerCase()}`,texto:deFactura()?`Aqu\xED salen las estancias en cuanto ${marca().nombre} las factura, que es a mes vencido.`:"Aqu\xED salen las reservas confirmadas de tus propiedades."})):hijos(f.datos)}function Reparto({a,b}){let t=a+b,pa=t>0?a/t*100:0;return __gh("div",{style:{width:"100%"},"data-gufi-src":"resumen.tsx:21"},__gh("div",{style:{display:"flex",height:10,borderRadius:999,overflow:"hidden",background:"#f0f0f2"},"data-gufi-src":"resumen.tsx:22"},__gh("div",{style:{width:`${pa}%`,background:B.accent},"data-gufi-src":"resumen.tsx:23"}),__gh("div",{style:{width:`${100-pa}%`,background:B.gold},"data-gufi-src":"resumen.tsx:24"})),__gh("div",{style:{display:"flex",justifyContent:"space-between",fontSize:12,color:B.muted,marginTop:8},"data-gufi-src":"resumen.tsx:26"},__gh("span",{"data-gufi-src":"resumen.tsx:27"},"Pernocta ",pct(pa)),__gh("span",{"data-gufi-src":"resumen.tsx:27"},"Limpieza ",pct(100-pa))))}function MesAMes({meses,setPeriodo,varios}){let[sobre,setSobre]=(0,import_react2.useState)(null),max=Math.max(1,...meses.map(m=>m.facturado)),ALTO=190;return __gh("div",{className:"p-card",style:{minWidth:0},"data-gufi-src":"resumen.tsx:38"},__gh("div",{className:"p-card-h","data-gufi-src":"resumen.tsx:39"},__gh("div",{"data-gufi-src":"resumen.tsx:40"},__gh("h3",{"data-gufi-src":"resumen.tsx:40"},"Mes a mes"),__gh("p",{"data-gufi-src":"resumen.tsx:40"},"Por mes de entrada del hu\xE9sped",varios?" \xB7 pulsa un mes para verlo solo":"")),__gh("div",{className:"p-note",style:{gap:14},"data-gufi-src":"resumen.tsx:41"},__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:6},"data-gufi-src":"resumen.tsx:42"},__gh("span",{className:"p-dot",style:{background:B.accent},"data-gufi-src":"resumen.tsx:42"}),"Pernocta"),__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:6},"data-gufi-src":"resumen.tsx:43"},__gh("span",{className:"p-dot",style:{background:B.gold},"data-gufi-src":"resumen.tsx:43"}),"Limpieza"))),__gh("div",{style:{padding:"18px 20px 16px",overflowX:"auto"},"data-gufi-src":"resumen.tsx:46"},__gh("div",{style:{display:"flex",alignItems:"flex-end",gap:meses.length>8?8:14,minWidth:meses.length*44,height:ALTO+58},"data-gufi-src":"resumen.tsx:47"},meses.map(m=>{let h=m.facturado/max*ALTO,hp=m.facturado>0?m.pernocta/m.facturado*h:0,on=sobre===m.mes;return __gh("button",{key:m.mes,onClick:()=>varios&&setPeriodo({desde:m.mes+"-01",hasta:primeroMesSiguiente(m.mes)}),onMouseEnter:()=>setSobre(m.mes),onMouseLeave:()=>setSobre(null),title:`${mesLabel(m.mes)} \xB7 ${money2(m.facturado)} \xB7 ${num(m.estancias)} estancias`,style:{flex:1,minWidth:30,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"flex-end",height:"100%",background:"transparent",border:"none",cursor:varios?"pointer":"default",padding:0},"data-gufi-src":"resumen.tsx:53"},__gh("div",{className:"b-num",style:{fontSize:11.5,fontWeight:600,color:on?B.ink:B.muted,marginBottom:6,whiteSpace:"nowrap"},"data-gufi-src":"resumen.tsx:57"},moneyK(m.facturado)),__gh("div",{style:{width:"100%",maxWidth:46,height:Math.max(2,h),borderRadius:7,overflow:"hidden",display:"flex",flexDirection:"column-reverse",opacity:sobre&&!on?.55:1,transition:"opacity .2s"},"data-gufi-src":"resumen.tsx:58"},__gh("div",{style:{height:hp,background:B.accent},"data-gufi-src":"resumen.tsx:59"}),__gh("div",{style:{flex:1,background:B.gold},"data-gufi-src":"resumen.tsx:60"})),__gh("div",{style:{fontSize:12,color:on?B.ink:B.muted,marginTop:8,fontWeight:on?600:400,textTransform:"capitalize"},"data-gufi-src":"resumen.tsx:62"},mesCorto(m.mes)),__gh("div",{className:"b-num",style:{fontSize:11,color:B.faint,marginTop:1},"data-gufi-src":"resumen.tsx:63"},m.ocupacion==null?"\u2014":pct(m.ocupacion)))})),__gh("div",{className:"p-note",style:{marginTop:6},"data-gufi-src":"resumen.tsx:68"},"Debajo de cada mes, su ocupaci\xF3n.")))}function PorCanal2({canales,total}){return __gh("div",{className:"p-card",style:{minWidth:0},"data-gufi-src":"resumen.tsx:76"},__gh("div",{className:"p-card-h","data-gufi-src":"resumen.tsx:77"},__gh("div",{"data-gufi-src":"resumen.tsx:77"},__gh("h3",{"data-gufi-src":"resumen.tsx:77"},"Por canal"),__gh("p",{"data-gufi-src":"resumen.tsx:77"},"De d\xF3nde vienen las reservas"))),__gh("div",{style:{padding:"14px 20px 20px"},"data-gufi-src":"resumen.tsx:78"},canales.length?canales.map(c=>{let peso=total>0?c.facturado/total*100:0;return __gh("div",{key:c.canal,style:{padding:"10px 0",borderBottom:"1px solid #f0f0f2"},"data-gufi-src":"resumen.tsx:82"},__gh("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:13.5},"data-gufi-src":"resumen.tsx:83"},__gh("span",{className:"p-dot",style:{background:canalColor(c.canal)},"data-gufi-src":"resumen.tsx:84"}),__gh("span",{style:{fontWeight:600,color:B.ink},"data-gufi-src":"resumen.tsx:85"},c.canal),__gh("span",{className:"b-num",style:{marginLeft:"auto",fontWeight:600},"data-gufi-src":"resumen.tsx:86"},money2(c.facturado))),__gh("div",{style:{display:"flex",alignItems:"center",gap:10,marginTop:7},"data-gufi-src":"resumen.tsx:88"},__gh("div",{style:{flex:1,height:5,borderRadius:999,background:"#f0f0f2",overflow:"hidden"},"data-gufi-src":"resumen.tsx:89"},__gh("div",{style:{width:`${peso}%`,height:"100%",background:canalColor(c.canal)},"data-gufi-src":"resumen.tsx:90"})),__gh("span",{className:"b-num",style:{fontSize:12,color:B.muted,width:128,textAlign:"right"},"data-gufi-src":"resumen.tsx:92"},pct(peso)," \xB7 ",num(c.estancias)," estancias")))}):__gh("div",{className:"p-note","data-gufi-src":"resumen.tsx:96"},"Sin estancias en el periodo.")))}function PorPropiedad({propiedades,propPorId,setPropiedad}){let{orden,th,flecha}=useOrden({k:"facturado",asc:!1}),[todas,setTodas]=(0,import_react2.useState)(!1),conDatos=propiedades.filter(p=>p.facturado||p.estancias),filas=ordenar(todas?propiedades:conDatos,orden,{nombre:p=>(propPorId[p.id]||{}).nombre,estancias:p=>p.estancias,noches:p=>p.noches,ocupacion:p=>p.ocupacion,pernocta:p=>p.pernocta,limpieza:p=>p.limpieza,facturado:p=>p.facturado}),sinDatos=propiedades.length-conDatos.length;return __gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"resumen.tsx:112"},__gh("div",{className:"p-card-h",style:{paddingBottom:12},"data-gufi-src":"resumen.tsx:113"},__gh("div",{"data-gufi-src":"resumen.tsx:114"},__gh("h3",{"data-gufi-src":"resumen.tsx:114"},"Por propiedad"),__gh("p",{"data-gufi-src":"resumen.tsx:114"},"Pulsa una para verla sola")),sinDatos?__gh("button",{className:"p-btn p-btn-s",onClick:()=>setTodas(!todas),"data-gufi-src":"resumen.tsx:115"},todas?"S\xF3lo con estancias":`Ver tambi\xE9n ${num(sinDatos)} sin estancias`):null),__gh("div",{style:{overflowX:"auto"},"data-gufi-src":"resumen.tsx:117"},__gh("table",{className:"p-table",style:{minWidth:760},"data-gufi-src":"resumen.tsx:118"},__gh("thead",{"data-gufi-src":"resumen.tsx:119"},__gh("tr",{"data-gufi-src":"resumen.tsx:119"},__gh("th",{...th("nombre"),"data-gufi-src":"resumen.tsx:120"},"Propiedad",flecha("nombre")),__gh("th",{"data-r":"1",...th("estancias"),"data-gufi-src":"resumen.tsx:121"},"Estancias",flecha("estancias")),__gh("th",{"data-r":"1",...th("noches"),"data-gufi-src":"resumen.tsx:122"},"Noches",flecha("noches")),__gh("th",{"data-r":"1",...th("ocupacion"),"data-gufi-src":"resumen.tsx:123"},"Ocupaci\xF3n",flecha("ocupacion")),__gh("th",{"data-r":"1",...th("pernocta"),"data-gufi-src":"resumen.tsx:124"},"Pernocta",flecha("pernocta")),__gh("th",{"data-r":"1",...th("limpieza"),"data-gufi-src":"resumen.tsx:125"},"Limpieza",flecha("limpieza")),__gh("th",{"data-r":"1",...th("facturado"),"data-gufi-src":"resumen.tsx:126"},deFactura()?"Total facturado":"Total",flecha("facturado")))),__gh("tbody",{"data-gufi-src":"resumen.tsx:128"},filas.map(p=>{let ficha=propPorId[p.id]||{};return __gh("tr",{key:p.id,className:"p-click",onClick:()=>setPropiedad(String(p.id)),"data-gufi-src":"resumen.tsx:132"},__gh("td",{style:{fontWeight:500,maxWidth:320,overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"resumen.tsx:133"},ficha.nombre,p.unidades>1?__gh("span",{style:{color:B.faint,fontWeight:400},"data-gufi-src":"resumen.tsx:133"}," \xB7 ",p.unidades," unidades"):null),__gh("td",{"data-r":"1","data-gufi-src":"resumen.tsx:134"},num(p.estancias)),__gh("td",{"data-r":"1","data-gufi-src":"resumen.tsx:135"},num(p.noches)),__gh("td",{"data-r":"1","data-gufi-src":"resumen.tsx:136"},p.ocupacion==null?__gh("span",{style:{color:B.faint},"data-gufi-src":"resumen.tsx:136"},"\u2014"):pct(p.ocupacion)),__gh("td",{"data-r":"1","data-gufi-src":"resumen.tsx:137"},money2(p.pernocta)),__gh("td",{"data-r":"1","data-gufi-src":"resumen.tsx:138"},money2(p.limpieza)),__gh("td",{"data-r":"1",style:{fontWeight:600},"data-gufi-src":"resumen.tsx:139"},money2(p.facturado)))})))))}function Resumen({f,periodo,setPeriodo,setPropiedad,propPorId}){return __gh(Estado,{f,periodo,hijos:d2=>{let t=d2.totales,varios=d2.meses.length>1;return __gh("div",{className:"p-grid","data-gufi-src":"resumen.tsx:156"},__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"resumen.tsx:157"},__gh("div",{style:{padding:"24px 24px 22px",display:"flex",gap:28,flexWrap:"wrap",alignItems:"flex-end",justifyContent:"space-between"},"data-gufi-src":"resumen.tsx:158"},__gh("div",{style:{minWidth:0},"data-gufi-src":"resumen.tsx:159"},__gh("div",{className:"p-note","data-gufi-src":"resumen.tsx:160"},deFactura()?"Total facturado":"Lo que dejan tus reservas"," \xB7 ",periodoTexto(periodo.desde,periodo.hasta)),__gh("div",{className:"b-num",style:{fontSize:"clamp(34px, 6vw, 48px)",fontWeight:600,letterSpacing:"-1.6px",lineHeight:1.05,marginTop:8,color:B.ink},"data-gufi-src":"resumen.tsx:161"},money2(t.facturado)),__gh("div",{style:{display:"flex",gap:22,flexWrap:"wrap",marginTop:12,fontSize:14,color:B.sub},"data-gufi-src":"resumen.tsx:162"},__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:7},"data-gufi-src":"resumen.tsx:163"},__gh("span",{className:"p-dot",style:{background:B.accent},"data-gufi-src":"resumen.tsx:163"}),"Pernocta ",__gh("b",{className:"b-num",style:{color:B.ink},"data-gufi-src":"resumen.tsx:163"},money2(t.pernocta))),__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:7},"data-gufi-src":"resumen.tsx:164"},__gh("span",{className:"p-dot",style:{background:B.gold},"data-gufi-src":"resumen.tsx:164"}),"Limpieza ",__gh("b",{className:"b-num",style:{color:B.ink},"data-gufi-src":"resumen.tsx:164"},money2(t.limpieza))))),__gh("div",{style:{width:280,maxWidth:"100%"},"data-gufi-src":"resumen.tsx:167"},__gh(Reparto,{a:t.pernocta,b:t.limpieza}))),__gh("div",{className:"p-stats",style:{borderTop:`1px solid ${B.hair}`},"data-gufi-src":"resumen.tsx:169"},__gh(Cifra,{l:"Estancias",v:num(t.estancias),s:`${num(t.noches)} noches`}),__gh(Cifra,{l:"Ocupaci\xF3n",v:t.ocupacion==null?"\u2014":pct(t.ocupacion),s:t.noches_disponibles?`${num(t.noches_ocupadas)} de ${num(t.noches_disponibles)} noches`:"sin estancias para medirla"}),__gh(Cifra,{l:"Precio medio por noche",v:t.precio_noche==null?"\u2014":money2(t.precio_noche),s:"pernocta entre noches"}),__gh(Cifra,{l:"Estancia media",v:t.estancia_media==null?"\u2014":`${String(t.estancia_media).replace(".",",")} noches`,s:t.ajustes?`incluye ${money2(t.ajustes)} de ajustes`:"por reserva"}))),__gh("div",{className:"p-grid p-g-2-1","data-gufi-src":"resumen.tsx:176"},__gh(MesAMes,{meses:d2.meses.filter(m=>m.estancias||m.facturado),setPeriodo,varios}),__gh(PorCanal2,{canales:d2.canales,total:t.facturado})),d2.propiedades.length>1?__gh(PorPropiedad,{propiedades:d2.propiedades,propPorId,setPropiedad}):null,__gh("p",{className:"p-note",style:{lineHeight:1.5},"data-gufi-src":"resumen.tsx:181"},deFactura()?`S\xF3lo cuentan las estancias que ${marca().nombre} ya ha facturado. La ocupaci\xF3n se mide desde la primera estancia facturada de cada propiedad hasta el \xFAltimo mes facturado.`:"Cuentan las reservas confirmadas que entran en el periodo, con lo que paga el hu\xE9sped menos la comisi\xF3n del canal. La ocupaci\xF3n se mide desde la primera reserva de cada propiedad.",t.ajustes?" Los ajustes son resoluciones de la plataforma y redondeos: suman al total pero no son estancias.":""))}})}var import_react3=require("react"),import_lucide_react3=require("lucide-react");var _xlsx=null;function loadXLSX(){let w=window;return w.XLSX&&w.__xlsxStyled?Promise.resolve(w.XLSX):_xlsx||(_xlsx=new Promise((resolve,reject)=>{let s=document.createElement("script");s.src="https://cdn.jsdelivr.net/npm/xlsx-js-style@1.2.0/dist/xlsx.bundle.js",s.async=!0,s.onload=()=>{w.XLSX?(w.__xlsxStyled=!0,resolve(w.XLSX)):reject(new Error("No se pudo cargar el generador de Excel"))},s.onerror=()=>{_xlsx=null,reject(new Error("No se pudo cargar el generador de Excel. Revisa la conexi\xF3n y vuelve a probar."))},document.head.appendChild(s)}),_xlsx)}var TINTA="1D1D1F",CREMA="F5F5F7",HILO="E5E5E7",borde={style:"thin",color:{rgb:HILO}},bordes={top:borde,bottom:borde,left:borde,right:borde},limpioArchivo=s=>String(s??"").normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[^\w]+/g,"_").replace(/^_+|_+$/g,"").slice(0,50),dmy=s=>{let m=String(s||"").match(/^(\d{4})-(\d{2})-(\d{2})/);return m?`${m[3]}/${m[2]}/${m[1]}`:String(s||"")};async function exportarTabla(archivo,hoja,titulo,sub,columnas,filas){return exportarHojas(archivo,[{hoja,titulo,sub,columnas,filas}])}async function exportarHojas(archivo,hojas){let XLSX=await loadXLSX(),wb=XLSX.utils.book_new();hojas.forEach(h=>XLSX.utils.book_append_sheet(wb,hojaTabla(XLSX,h.titulo,h.sub,h.columnas,h.filas),h.hoja.replace(/[\\/*?:[\]]/g," ").slice(0,31))),XLSX.writeFile(wb,archivo)}function hojaTabla(XLSX,titulo,sub,columnas,filas){let ws={},put=(r,c,v,s)=>{ws[XLSX.utils.encode_cell({r,c})]={v:v??"",t:typeof v=="number"?"n":"s",s}},nc=columnas.length;put(0,0,titulo,{font:{bold:!0,sz:14,color:{rgb:"FFFFFF"}},fill:{fgColor:{rgb:TINTA}},alignment:{vertical:"center"}});for(let c=1;cput(3,c,col.t,{font:{bold:!0,sz:10,color:{rgb:TINTA}},fill:{fgColor:{rgb:CREMA}},border:bordes,alignment:{horizontal:col.eur||col.n?"right":"left"}})),filas.forEach((f,i)=>columnas.forEach((col,c)=>{let v=f[c];put(4+i,c,col.fecha?dmy(v):v,{font:{sz:10},border:bordes,alignment:{horizontal:col.eur||col.n?"right":"left"},numFmt:col.eur?'#,##0.00" \u20AC"':void 0})})),ws["!ref"]=XLSX.utils.encode_range({s:{r:0,c:0},e:{r:3+Math.max(1,filas.length),c:nc-1}}),ws["!merges"]=[{s:{r:0,c:0},e:{r:0,c:nc-1}}],ws["!cols"]=columnas.map(c=>({wch:c.w||14})),ws["!rows"]=[{hpt:24}],ws}var numsFactura=fs=>fs.map(f=>f.n).join(", ");async function exportarMatch(d2,desde,hasta,etiqueta){let XLSX=await loadXLSX(),r2=x=>Math.round((Number(x)||0)*100)/100,S={title:{font:{bold:!0,sz:15,color:{rgb:"FFFFFF"}},fill:{fgColor:{rgb:TINTA}},alignment:{vertical:"center"}},sub:{font:{sz:10,italic:!0,color:{rgb:"6E6E73"}}},prop:{font:{bold:!0,sz:11,color:{rgb:"FFFFFF"}},fill:{fgColor:{rgb:TINTA}},alignment:{horizontal:"center",vertical:"center"},border:bordes},pay:{font:{bold:!0,sz:11,color:{rgb:"FFFFFF"}},fill:{fgColor:{rgb:"1E7A4D"}},alignment:{horizontal:"center",vertical:"center"},border:bordes},head:{font:{bold:!0,sz:9.5,color:{rgb:TINTA}},fill:{fgColor:{rgb:CREMA}},border:bordes,alignment:{horizontal:"left"}},headR:{font:{bold:!0,sz:9.5,color:{rgb:TINTA}},fill:{fgColor:{rgb:CREMA}},border:bordes,alignment:{horizontal:"right"}},cell:{font:{sz:10},border:bordes},cellNum:{font:{sz:10},border:bordes,alignment:{horizontal:"right"}},cellEur:{font:{sz:10},border:bordes,alignment:{horizontal:"right"},numFmt:'#,##0.00" \u20AC"'},payDate:{font:{sz:10,bold:!0},border:bordes,alignment:{horizontal:"center",vertical:"center"},fill:{fgColor:{rgb:"EAF6EF"}}},payTxt:{font:{sz:10},border:bordes,alignment:{horizontal:"center",vertical:"center"},fill:{fgColor:{rgb:"EAF6EF"}}},payEur:{font:{bold:!0,sz:11,color:{rgb:"146C43"}},border:bordes,alignment:{horizontal:"right",vertical:"center"},numFmt:'#,##0.00" \u20AC"',fill:{fgColor:{rgb:"EAF6EF"}}},payPend:{font:{sz:9.5,italic:!0,color:{rgb:"B45309"}},border:bordes,alignment:{horizontal:"center",vertical:"center"}},sub2:{font:{bold:!0,sz:11,color:{rgb:"1D1D1F"}},border:bordes,alignment:{horizontal:"right"},numFmt:'#,##0.00" \u20AC"',fill:{fgColor:{rgb:CREMA}}},subLbl:{font:{bold:!0,sz:10,color:{rgb:TINTA}},border:bordes,fill:{fgColor:{rgb:CREMA}}}},wf=(base,rgb)=>({...base,fill:{fgColor:{rgb}}}),BAND=["FFFFFF","F7F1EC"],BW=6,PITCH=BW+1,PW=4,cells={},merges=[],maxRow=0,maxCol=0,put=(r3,c,v,s)=>{cells[XLSX.utils.encode_cell({r:r3,c})]={v:v??"",t:typeof v=="number"?"n":"s",s},r3>maxRow&&(maxRow=r3),c>maxCol&&(maxCol=c)},putF=(r3,c,f,v,s)=>{cells[XLSX.utils.encode_cell({r:r3,c})]={t:"n",f,v,s},r3>maxRow&&(maxRow=r3),c>maxCol&&(maxCol=c)},mergeRow=(r3,c0,c1)=>merges.push({s:{r:r3,c:c0},e:{r:r3,c:c1}}),mergeCol=(c,r0,r1)=>{r1>r0&&merges.push({s:{r:r0,c},e:{r:r1,c}})},all=(d2.pisos||[]).flatMap(p=>(p.unidades||[]).flatMap(u=>(u.reservas||[]).map(r3=>({...r3,piso:u.unidad?p.piso+" \xB7 "+u.unidad:p.piso}))));if(desde||hasta?all=all.filter(r3=>{let c=r3.checkin||"";return c&&(!desde||c>=desde)&&(!hasta||cr3.pago),!all.length)throw new Error(`No hay reservas en el MATCH de ${d2.propietario} para ${etiqueta||"ese periodo"}.`);let pisos=[...new Set(all.map(r3=>r3.piso))].sort(),col={};pisos.forEach((pz,i)=>{col[pz]=i*PITCH});let payCol=pisos.length*PITCH,totalW=payCol+PW;put(0,0,`MATCH \xB7 ${d2.propietario||""}`,S.title);for(let c=1;cr3.pago).length;put(1,0,`Reservas \u2194 pago recibido en banco${etiqueta?" \xB7 "+etiqueta:""} \xB7 ${all.length} reservas (${nPag} cobradas${all.length-nPag?`, ${all.length-nPag} pendientes`:""}) \xB7 cada banda de color = un pago`,S.sub);let TOP=3;pisos.forEach(pz=>{let c0=col[pz];for(let c=c0;cput(TOP+1,c0+i,h,i===2||i===4?S.headR:S.head))});for(let c=payCol;cput(TOP+1,payCol+i,h,i===3?S.headR:S.head));let byRef={};all.forEach(r3=>{let k=r3.pago&&r3.pago.ref||"sin-"+r3.codigo;(byRef[k]=byRef[k]||[]).push(r3)});let pagos=Object.keys(byRef).map(k=>{let rs=byRef[k].sort((a,b)=>String(a.piso).localeCompare(String(b.piso))||String(a.checkin||"").localeCompare(String(b.checkin||""))),p0=rs[0].pago||{};return{rs,fecha:p0.fecha||"",cuenta:p0.cuenta||"",canal:rs[0].canal||"",importe:r2(rs.reduce((s,x)=>s+(x.total_reserva||0),0))}}).sort((a,b)=>String(a.fecha).localeCompare(String(b.fecha))),r=TOP+2,band=0;pagos.forEach(po=>{let bg=BAND[band++%2],r0=r,porCol={};po.rs.forEach(x=>{let L=porCol[col[x.piso]]=porCol[col[x.piso]]||[],pern=x.odoo_pernocta!=null?Number(x.odoo_pernocta):x.pernocta!=null?Number(x.pernocta):x.total_reserva!=null?Number(x.total_reserva):"",limp=x.odoo_limpieza!=null?Number(x.odoo_limpieza):Number(x.limpieza)||0;L.push({a:x.codigo||"",b:dmy(x.checkin),n:x.noches!=null?x.noches:"",h:x.huesped||"",t:pern,f:numsFactura(x.facturas)}),limp>0&&L.push({a:(x.codigo||"")+" (Limpieza)",b:dmy(x.checkin),n:x.noches!=null?x.noches:"",h:x.huesped||"",t:limp,f:""})});let alto=Math.max(1,...Object.values(porCol).map(a=>a.length));for(let rr=r0;rr{let c0=Number(ck);porCol[c0].forEach((L,idx)=>{let rr=r0+idx;put(rr,c0,L.a,wf(S.cell,bg)),put(rr,c0+1,L.b,wf(S.cell,bg)),put(rr,c0+2,L.n,wf(S.cellNum,bg)),put(rr,c0+3,L.h,wf(S.cell,bg)),put(rr,c0+4,L.t,wf(S.cellEur,bg)),put(rr,c0+5,L.f,wf(S.cell,bg))})}),r=r0+alto;let r1=r-1,cobrado=!!po.fecha;for(let rr=r0;rr<=r1;rr++)if(put(rr,payCol,rr===r0?dmy(po.fecha):"",wf(S.payDate,bg)),put(rr,payCol+1,rr===r0?po.canal:"",wf(S.payTxt,bg)),put(rr,payCol+2,rr===r0?po.cuenta:"",wf(S.payTxt,bg)),rr===r0&&cobrado){let partes=Object.keys(porCol).map(ck=>"SUM("+XLSX.utils.encode_cell({r:r0,c:Number(ck)+4})+":"+XLSX.utils.encode_cell({r:r1,c:Number(ck)+4})+")");putF(rr,payCol+3,partes.join("+"),po.importe,wf(S.payEur,bg))}else put(rr,payCol+3,rr===r0?"pendiente":"",wf(cobrado?S.payEur:S.payPend,bg));mergeCol(payCol,r0,r1),mergeCol(payCol+1,r0,r1),mergeCol(payCol+2,r0,r1),mergeCol(payCol+3,r0,r1)});let total=r2(pagos.reduce((s,po)=>s+po.importe,0));put(r,payCol,"TOTAL",S.subLbl),put(r,payCol+1,"",S.subLbl),put(r,payCol+2,"",S.subLbl),putF(r,payCol+3,"SUM("+XLSX.utils.encode_cell({r:TOP+2,c:payCol+3})+":"+XLSX.utils.encode_cell({r:r-1,c:payCol+3})+")",total,S.sub2);let ws={...cells};ws["!ref"]=XLSX.utils.encode_range({s:{r:0,c:0},e:{r:maxRow,c:maxCol}}),ws["!merges"]=merges;let cols=[];for(let b=0;bcols.push({wch:w})),cols.push({wch:2});[12,11,14,13].forEach(w=>cols.push({wch:w})),ws["!cols"]=cols,ws["!rows"]=[{hpt:22}];let wb=XLSX.utils.book_new();return XLSX.utils.book_append_sheet(wb,ws,String(d2.propietario||"MATCH").replace(/[\\/*?:[\]]/g," ").slice(0,31)),XLSX.writeFile(wb,`MATCH_${limpioArchivo(d2.propietario)}${etiqueta?"_"+limpioArchivo(etiqueta):""}.xlsx`),{reservas:all.length,cobradas:nPag,total}}var PAGINA=200,DOC={Passport:"Pasaporte",Identitycard:"Documento de identidad"},SEXO={F:"Mujer",M:"Hombre"},TIPO_HUESPED={adult:"Adulto",child:"Ni\xF1o",infant:"Beb\xE9"},edadEn=(nac,dia)=>{if(!nac||!dia)return null;let d2=String(dia).slice(0,10);if(d2.length<10)return null;let a=Number(d2.slice(0,4))-Number(nac.slice(0,4));return d2.slice(5){let n=String(v.nombre||"").trim(),sueltos=[v.apellido,v.apellido2].map(x=>String(x||"").trim()).filter(x=>x&&!n.toLowerCase().includes(x.toLowerCase()));return[n,...new Set(sueltos)].filter(Boolean).join(" ")||"\u2014"};function QuienVino({api,token,e}){let[d2,setD]=(0,import_react3.useState)(null),[error,setError]=(0,import_react3.useState)("");if((0,import_react3.useEffect)(()=>{let vivo=!0;return setD(null),setError(""),api("portal_viajeros",{token,nro:e.nro}).then(r=>{vivo&&setD(r)}).catch(err=>{vivo&&setError(String(err&&err.message||err))}),()=>{vivo=!1}},[e.nro,token,api]),error)return __gh("div",{className:"p-note",style:{color:B.red},"data-gufi-src":"reservas.tsx:54"},"No se ha podido leer el registro de viajeros: ",error);if(!d2)return __gh("div",{className:"p-note","data-gufi-src":"reservas.tsx:55"},"Leyendo el registro de viajeros\u2026");let vs=d2.viajeros||[];return vs.length?__gh(__gf,null,vs.map(v=>{let edad=edadEn(v.nacimiento,e.entrada),documento=[DOC[v.tipo_documento]||v.tipo_documento,v.documento].filter(Boolean).join(" "),domicilio=[v.direccion,[v.cp,v.ciudad||v.municipio].filter(Boolean).join(" "),v.pais_residencia].filter(Boolean).join(" \xB7 "),contacto=[v.email,v.telefono].filter(Boolean).join(" \xB7 ");return __gh("div",{key:v.id,style:{borderRadius:12,background:"#f7f7f9",padding:"10px 13px",marginTop:8},"data-gufi-src":"reservas.tsx:67"},__gh("div",{style:{display:"flex",justifyContent:"space-between",gap:10,alignItems:"baseline",flexWrap:"wrap"},"data-gufi-src":"reservas.tsx:68"},__gh("span",{style:{fontSize:14,fontWeight:600,color:B.ink},"data-gufi-src":"reservas.tsx:69"},nombreViajero(v)),__gh("span",{style:{fontSize:12,color:B.muted},"data-gufi-src":"reservas.tsx:70"},[edad!=null?`${edad} a\xF1os`:null,SEXO[v.sexo],TIPO_HUESPED[v.tipo_huesped]].filter(Boolean).join(" \xB7 "))),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:74"},__gh("span",{"data-gufi-src":"reservas.tsx:74"},"Documento"),__gh("span",{"data-gufi-src":"reservas.tsx:74"},documento||"\u2014",v.documento_pais?` \xB7 ${v.documento_pais}`:"")),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:75"},__gh("span",{"data-gufi-src":"reservas.tsx:75"},"Nacionalidad"),__gh("span",{"data-gufi-src":"reservas.tsx:75"},v.pais||"\u2014")),v.nacimiento?__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:76"},__gh("span",{"data-gufi-src":"reservas.tsx:76"},"Nacimiento"),__gh("span",{"data-gufi-src":"reservas.tsx:76"},fmtLarga(v.nacimiento))):null,__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:77"},__gh("span",{"data-gufi-src":"reservas.tsx:77"},"Domicilio"),__gh("span",{style:{textAlign:"right"},"data-gufi-src":"reservas.tsx:77"},domicilio||"\u2014")),contacto?__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:78"},__gh("span",{"data-gufi-src":"reservas.tsx:78"},"Contacto"),__gh("span",{style:{textAlign:"right"},"data-gufi-src":"reservas.tsx:78"},contacto)):null,v.checkin?__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:79"},__gh("span",{"data-gufi-src":"reservas.tsx:79"},"Check-in online"),__gh("span",{"data-gufi-src":"reservas.tsx:79"},fmtLarga(v.checkin))):null)}),d2.origen==="canal"?__gh("div",{className:"p-note",style:{marginTop:8},"data-gufi-src":"reservas.tsx:84"},"Ficha del registro del canal: trae documento y calle, pero no ciudad ni tel\xE9fono. Las del check-in online s\xED los traen."):null):__gh("div",{className:"p-note","data-gufi-src":"reservas.tsx:57"},"Esta estancia no tiene ninguna ficha de viajero registrada.")}var nombreUnidad=(e,propPorId)=>{if(!e.u)return"";let u=((propPorId[e.p]||{}).unidades||[]).find(x=>x.id===e.u);return u?unidadDe(u.nombre):""},tituloEstancia=e=>e.ajuste?"Ajuste":e.solo_limpieza?"S\xF3lo limpieza":e.huesped||"Sin nombre";function DetalleEstancia({e,propPorId,onVolver,api,token}){let prop=propPorId[e.p]||{},unidad=nombreUnidad(e,propPorId),personas=e.personas?`${e.personas}${e.adultos!=null?` (${e.adultos} adulto${e.adultos===1?"":"s"}${e.ninos?`, ${e.ninos} ni\xF1o${e.ninos===1?"":"s"}`:""})`:""}`:"\u2014";return __gh(Pagina,{titulo:tituloEstancia(e),sub:[prop.nombre,unidad].filter(Boolean).join(" \xB7 "),onVolver},e.ajuste?__gh("div",{style:{borderRadius:12,background:"#f7f3ee",padding:"11px 13px",fontSize:13,color:B.sub,lineHeight:1.5,marginBottom:6},"data-gufi-src":"reservas.tsx:105"},"Es un ajuste \u2014una resoluci\xF3n de la plataforma o un redondeo\u2014: suma a lo facturado, pero no es una estancia.",e.nro?__gh("div",{style:{color:B.muted,marginTop:6,fontSize:12.5},"data-gufi-src":"reservas.tsx:107"},e.nro):null):null,__gh("div",{style:{display:"grid",gridTemplateColumns:"repeat(3,1fr)",gap:10,marginTop:4},"data-gufi-src":"reservas.tsx:110"},[["Entrada",fmtLarga(e.entrada)],["Salida",e.ajuste?"\u2014":fmtLarga(e.salida)],["Noches",e.ajuste?"\u2014":num(e.noches)]].map(([l,v])=>__gh("div",{key:l,style:{background:"#f5f5f7",borderRadius:12,padding:"10px 12px"},"data-gufi-src":"reservas.tsx:112"},__gh("div",{style:{fontSize:11.5,color:B.muted},"data-gufi-src":"reservas.tsx:113"},l),__gh("div",{className:"b-num",style:{fontSize:15,fontWeight:600,color:B.ink,marginTop:3},"data-gufi-src":"reservas.tsx:114"},v)))),__gh("div",{className:"p-sec","data-gufi-src":"reservas.tsx:119"},deFactura()?"Facturado":"Importe"),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:120"},__gh("span",{"data-gufi-src":"reservas.tsx:120"},"Pernocta"),__gh("span",{"data-gufi-src":"reservas.tsx:120"},money2(e.pernocta))),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:121"},__gh("span",{"data-gufi-src":"reservas.tsx:121"},"Limpieza"),__gh("span",{"data-gufi-src":"reservas.tsx:121"},money2(e.limpieza))),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:122"},__gh("span",{style:{color:B.ink,fontWeight:600},"data-gufi-src":"reservas.tsx:122"},"Total"),__gh("span",{style:{fontWeight:700,fontSize:15},"data-gufi-src":"reservas.tsx:122"},money2(e.facturado))),e.ajuste?null:__gh(__gf,null,__gh("div",{className:"p-sec","data-gufi-src":"reservas.tsx:126"},"Reserva"),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:127"},__gh("span",{"data-gufi-src":"reservas.tsx:127"},"Canal"),__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:7},"data-gufi-src":"reservas.tsx:127"},__gh("span",{className:"p-dot",style:{background:canalColor(e.canal)},"data-gufi-src":"reservas.tsx:127"}),e.canal)),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:128"},__gh("span",{"data-gufi-src":"reservas.tsx:128"},"N\xBA de reserva"),__gh("span",{style:{fontFamily:"ui-monospace,SFMono-Regular,Menlo,monospace",fontSize:12.5},"data-gufi-src":"reservas.tsx:128"},e.nro||"\u2014")),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:129"},__gh("span",{"data-gufi-src":"reservas.tsx:129"},"Reserv\xF3 con"),__gh("span",{"data-gufi-src":"reservas.tsx:129"},e.antelacion==null?"\u2014":`${num(e.antelacion)} d\xEDa${e.antelacion===1?"":"s"} de antelaci\xF3n`)),__gh("div",{className:"p-sec","data-gufi-src":"reservas.tsx:131"},"Hu\xE9spedes"),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:132"},__gh("span",{"data-gufi-src":"reservas.tsx:132"},"Personas"),__gh("span",{"data-gufi-src":"reservas.tsx:132"},personas)),__gh("div",{className:"p-kv","data-gufi-src":"reservas.tsx:133"},__gh("span",{"data-gufi-src":"reservas.tsx:133"},"Pa\xEDs"),__gh("span",{"data-gufi-src":"reservas.tsx:133"},paisEs(e.pais))),__gh("div",{className:"p-sec","data-gufi-src":"reservas.tsx:135"},"Qui\xE9n vino \xB7 registro de viajeros"),e.nro?__gh(QuienVino,{api,token,e}):__gh("div",{className:"p-note","data-gufi-src":"reservas.tsx:138"},"Esta estancia no tiene n\xFAmero de reserva, as\xED que no se le puede buscar registro de viajeros.")))}function exportarEstancias(estancias,propPorId,periodo,titulo){let columnas=[{t:"Entrada",w:12,fecha:!0},{t:"Salida",w:12,fecha:!0},{t:"Noches",w:8,n:!0},{t:"Hu\xE9sped",w:26},{t:"Pa\xEDs",w:16},{t:"Personas",w:9,n:!0},{t:"Canal",w:13},{t:"N\xBA reserva",w:20},{t:"Propiedad",w:34},{t:"Unidad",w:16},{t:"Pernocta",w:13,eur:!0},{t:"Limpieza",w:12,eur:!0},{t:deFactura()?"Total facturado":"Total",w:15,eur:!0}],filas=estancias.map(e=>[e.entrada,e.ajuste?"":e.salida,e.ajuste?"":e.noches,tituloEstancia(e),e.pais?paisEs(e.pais):"",e.personas||"",e.canal,e.nro,(propPorId[e.p]||{}).nombre||"",nombreUnidad(e,propPorId),e.pernocta,e.limpieza,e.facturado]),p=periodoTexto(periodo.desde,periodo.hasta);return exportarTabla(`${limpioArchivo(titulo)}_${limpioArchivo(p)}.xlsx`,titulo,`${titulo} \xB7 ${p}`,`${deFactura()?`Estancias facturadas por ${marca().nombre}`:"Reservas confirmadas"} \xB7 ${num(estancias.length)} filas`,columnas,filas)}function Lista({d:d2,periodo,propPorId,abrirEstancia}){let movil=useIsMobile(900),[q,setQ]=(0,import_react3.useState)(""),[canal,setCanal]=(0,import_react3.useState)(""),[hasta,setHasta]=(0,import_react3.useState)(PAGINA),[exportando,setExportando]=(0,import_react3.useState)(!1),[errorExport,setErrorExport]=(0,import_react3.useState)(""),{orden,th,flecha}=useOrden({k:"entrada",asc:!1}),variasProps=d2.propiedades.length>1,norm=s=>String(s||"").normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase(),filtradas=(0,import_react3.useMemo)(()=>{let n=norm(q);return d2.estancias.filter(e=>(!canal||e.canal===canal)&&(!n||norm(`${e.huesped} ${e.nro} ${(propPorId[e.p]||{}).nombre}`).includes(n)))},[d2,q,canal,propPorId]),filas=(0,import_react3.useMemo)(()=>ordenar(filtradas,orden,{entrada:e=>e.entrada,noches:e=>e.noches,huesped:e=>tituloEstancia(e),canal:e=>e.canal,propiedad:e=>(propPorId[e.p]||{}).nombre,pernocta:e=>e.pernocta,limpieza:e=>e.limpieza,facturado:e=>e.facturado}),[filtradas,orden,propPorId]),tot=(0,import_react3.useMemo)(()=>filtradas.reduce((t,e)=>(t.pernocta+=e.pernocta,t.limpieza+=e.limpieza,t.facturado+=e.facturado,!e.ajuste&&!e.solo_limpieza&&(t.n+=1,t.noches+=e.noches),t),{n:0,noches:0,pernocta:0,limpieza:0,facturado:0}),[filtradas]),canales=d2.canales.map(c=>c.canal);async function exportar2(){setExportando(!0),setErrorExport("");try{await exportarEstancias(filas,propPorId,periodo,"Reservas")}catch(e){setErrorExport(String(e&&e.message||e))}setExportando(!1)}return __gh("div",{className:"p-grid","data-gufi-src":"reservas.tsx:188"},__gh("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:8},"data-gufi-src":"reservas.tsx:189"},__gh("label",{className:"p-pill",style:{cursor:"text",minWidth:240,flex:movil?"1 1 100%":"0 1 320px"},"data-gufi-src":"reservas.tsx:190"},__gh(import_lucide_react3.Search,{size:15,style:{color:B.faint}}),__gh("input",{value:q,onChange:e=>{setQ(e.target.value),setHasta(PAGINA)},placeholder:"Buscar hu\xE9sped, reserva o propiedad",style:{border:"none",outline:"none",background:"transparent",fontSize:13.5,flex:1,minWidth:0,color:B.ink},"data-gufi-src":"reservas.tsx:192"})),__gh("div",{className:"p-seg",style:{overflowX:"auto",maxWidth:"100%"},"data-gufi-src":"reservas.tsx:195"},__gh("button",{"data-on":canal?"0":"1",onClick:()=>setCanal(""),"data-gufi-src":"reservas.tsx:196"},"Todos"),canales.map(c=>__gh("button",{key:c,"data-on":canal===c?"1":"0",onClick:()=>setCanal(c),"data-gufi-src":"reservas.tsx:197"},c))),__gh("button",{className:"p-btn",style:{marginLeft:"auto"},onClick:exportar2,disabled:exportando||!filas.length,"data-gufi-src":"reservas.tsx:199"},__gh(import_lucide_react3.Download,{size:15}),exportando?"Preparando\u2026":"Excel")),errorExport?__gh("div",{className:"p-note",style:{color:B.red},"data-gufi-src":"reservas.tsx:201"},errorExport):null,__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"reservas.tsx:203"},__gh("div",{style:{display:"flex",gap:22,flexWrap:"wrap",padding:"14px 18px",borderBottom:`1px solid ${B.hair}`,fontSize:13.5,color:B.muted},"data-gufi-src":"reservas.tsx:204"},__gh("span",{"data-gufi-src":"reservas.tsx:205"},__gh("b",{className:"b-num",style:{color:B.ink},"data-gufi-src":"reservas.tsx:205"},num(tot.n))," estancias"),__gh("span",{"data-gufi-src":"reservas.tsx:206"},__gh("b",{className:"b-num",style:{color:B.ink},"data-gufi-src":"reservas.tsx:206"},num(tot.noches))," noches"),__gh("span",{"data-gufi-src":"reservas.tsx:207"},"Pernocta ",__gh("b",{className:"b-num",style:{color:B.ink},"data-gufi-src":"reservas.tsx:207"},money2(tot.pernocta))),__gh("span",{"data-gufi-src":"reservas.tsx:208"},"Limpieza ",__gh("b",{className:"b-num",style:{color:B.ink},"data-gufi-src":"reservas.tsx:208"},money2(tot.limpieza))),__gh("span",{"data-gufi-src":"reservas.tsx:209"},"Total ",__gh("b",{className:"b-num",style:{color:B.ink},"data-gufi-src":"reservas.tsx:209"},money2(tot.facturado)))),filas.length?movil?__gh("div",{"data-gufi-src":"reservas.tsx:212"},filas.slice(0,hasta).map(e=>__gh("button",{key:e.id,className:"p-click",onClick:()=>abrirEstancia(e),style:{display:"block",width:"100%",textAlign:"left",padding:"13px 16px",border:"none",borderBottom:"1px solid #f0f0f2",background:"transparent"},"data-gufi-src":"reservas.tsx:214"},__gh("div",{style:{display:"flex",alignItems:"baseline",gap:10},"data-gufi-src":"reservas.tsx:215"},__gh("span",{style:{fontSize:14.5,fontWeight:600,color:e.ajuste?B.muted:B.ink,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"data-gufi-src":"reservas.tsx:216"},tituloEstancia(e)),__gh("span",{className:"b-num",style:{marginLeft:"auto",fontSize:14.5,fontWeight:600},"data-gufi-src":"reservas.tsx:217"},money2(e.facturado))),__gh("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:12.5,color:B.muted,marginTop:4},"data-gufi-src":"reservas.tsx:219"},__gh("span",{className:"p-dot",style:{background:canalColor(e.canal),width:7,height:7},"data-gufi-src":"reservas.tsx:220"}),__gh("span",{"data-gufi-src":"reservas.tsx:221"},fmtLarga(e.entrada),e.ajuste?"":` \xB7 ${num(e.noches)} noche${e.noches===1?"":"s"}`),variasProps?__gh("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"data-gufi-src":"reservas.tsx:222"},"\xB7 ",(propPorId[e.p]||{}).nombre):null)))):__gh("div",{style:{overflowX:"auto"},"data-gufi-src":"reservas.tsx:228"},__gh("table",{className:"p-table",style:{minWidth:variasProps?1080:860},"data-gufi-src":"reservas.tsx:229"},__gh("thead",{"data-gufi-src":"reservas.tsx:230"},__gh("tr",{"data-gufi-src":"reservas.tsx:230"},__gh("th",{...th("entrada"),"data-gufi-src":"reservas.tsx:231"},"Entrada",flecha("entrada")),__gh("th",{"data-gufi-src":"reservas.tsx:232"},"Salida"),__gh("th",{"data-r":"1",...th("noches"),"data-gufi-src":"reservas.tsx:233"},"Noches",flecha("noches")),__gh("th",{...th("huesped"),"data-gufi-src":"reservas.tsx:234"},"Hu\xE9sped",flecha("huesped")),__gh("th",{...th("canal"),"data-gufi-src":"reservas.tsx:235"},"Canal",flecha("canal")),variasProps?__gh("th",{...th("propiedad"),"data-gufi-src":"reservas.tsx:236"},"Propiedad",flecha("propiedad")):null,__gh("th",{"data-r":"1",...th("pernocta"),"data-gufi-src":"reservas.tsx:237"},"Pernocta",flecha("pernocta")),__gh("th",{"data-r":"1",...th("limpieza"),"data-gufi-src":"reservas.tsx:238"},"Limpieza",flecha("limpieza")),__gh("th",{"data-r":"1",...th("facturado"),"data-gufi-src":"reservas.tsx:239"},"Total",flecha("facturado")))),__gh("tbody",{"data-gufi-src":"reservas.tsx:241"},filas.slice(0,hasta).map(e=>{let unidad=nombreUnidad(e,propPorId);return __gh("tr",{key:e.id,className:"p-click",onClick:()=>abrirEstancia(e),"data-gufi-src":"reservas.tsx:245"},__gh("td",{"data-gufi-src":"reservas.tsx:246"},fmtLarga(e.entrada)),__gh("td",{style:{color:B.muted},"data-gufi-src":"reservas.tsx:247"},e.ajuste?"\u2014":fmtLarga(e.salida)),__gh("td",{"data-r":"1","data-gufi-src":"reservas.tsx:248"},e.ajuste?"\u2014":num(e.noches)),__gh("td",{style:{maxWidth:240,overflow:"hidden",textOverflow:"ellipsis",fontWeight:500,color:e.ajuste||e.solo_limpieza?B.muted:B.ink},"data-gufi-src":"reservas.tsx:249"},tituloEstancia(e)),__gh("td",{"data-gufi-src":"reservas.tsx:250"},__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:7},"data-gufi-src":"reservas.tsx:250"},__gh("span",{className:"p-dot",style:{background:canalColor(e.canal)},"data-gufi-src":"reservas.tsx:250"}),e.canal)),variasProps?__gh("td",{style:{maxWidth:260,overflow:"hidden",textOverflow:"ellipsis",color:B.sub},"data-gufi-src":"reservas.tsx:251"},(propPorId[e.p]||{}).nombre,unidad?__gh("span",{style:{color:B.faint},"data-gufi-src":"reservas.tsx:251"}," \xB7 ",unidad):null):null,__gh("td",{"data-r":"1","data-gufi-src":"reservas.tsx:252"},money2(e.pernocta)),__gh("td",{"data-r":"1",style:{color:e.limpieza?B.ink:B.faint},"data-gufi-src":"reservas.tsx:253"},money2(e.limpieza)),__gh("td",{"data-r":"1",style:{fontWeight:600},"data-gufi-src":"reservas.tsx:254"},money2(e.facturado)))})))):__gh(Vacio,{titulo:"Ninguna estancia coincide",texto:"Prueba con otro nombre o quita el filtro de canal."}),filas.length>hasta?__gh("div",{style:{padding:14,display:"flex",justifyContent:"center",borderTop:`1px solid ${B.hair}`},"data-gufi-src":"reservas.tsx:263"},__gh("button",{className:"p-btn",onClick:()=>setHasta(hasta+PAGINA*2),"data-gufi-src":"reservas.tsx:264"},"Ver ",num(Math.min(PAGINA*2,filas.length-hasta))," m\xE1s de ",num(filas.length-hasta))):null))}function Reservas({f,periodo,propPorId,abrirEstancia}){return __gh(Estado,{f,periodo,hijos:d2=>__gh(Lista,{d:d2,periodo,propPorId,abrirEstancia})})}var import_react4=require("react"),import_lucide_react4=require("lucide-react");var DIA=864e5,ms=ymd3=>Date.parse(ymd3+"T00:00:00Z"),mesMas=(ym,n)=>{let[y,m]=ym.split("-").map(Number);return new Date(Date.UTC(y,m-1+n,1)).toISOString().slice(0,7)},INICIAL=["D","L","M","X","J","V","S"];function enCarriles(estancias,desde){let orden=[...estancias].sort((a,b)=>a.entradab.entrada?1:b.noches-a.noches),finDe=[];return orden.map(e=>{let ini=Math.round((ms(e.entrada)-ms(desde))/DIA),fin=ini+e.noches,c=finDe.findIndex(f=>f<=ini);return c<0?(c=finDe.length,finDe.push(fin)):finDe[c]=fin,{e,ini,fin,carril:c}})}function Barra({b,COL,dias,alto,abrirEstancia}){let L=Math.max(0,(b.ini+.5)*COL),R=Math.min(dias*COL,(b.fin+.5)*COL);if(R<=L)return null;let color=canalColor(b.e.canal),w=R-L-3,cortaIzq=b.ini+.5<0,cortaDer=b.fin+.5>dias;return __gh("button",{onClick:()=>abrirEstancia(b.e),title:`${tituloEstancia(b.e)} \xB7 ${fmtLarga(b.e.entrada)} \u2192 ${fmtLarga(b.e.salida)} \xB7 ${num(b.e.noches)} noche${b.e.noches===1?"":"s"} \xB7 ${money2(b.e.facturado)}`,style:{border:"none",position:"absolute",left:L+1.5,top:4+b.carril*alto,width:Math.max(4,w),height:alto-7,background:`${color}1f`,boxShadow:`inset 0 0 0 1px ${color}40`,borderLeft:cortaIzq?"none":`3px solid ${color}`,borderRadius:`${cortaIzq?0:7}px ${cortaDer?0:7}px ${cortaDer?0:7}px ${cortaIzq?0:7}px`,padding:"0 6px",display:"flex",alignItems:"center",gap:5,overflow:"hidden",cursor:"pointer",textAlign:"left"},"data-gufi-src":"calendario.tsx:43"},w>46?__gh("span",{style:{fontSize:12,fontWeight:600,color:B.ink,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"calendario.tsx:51"},tituloEstancia(b.e).split(" ")[0]):null,w>96?__gh("span",{style:{fontSize:11,color:B.muted,whiteSpace:"nowrap"},"data-gufi-src":"calendario.tsx:52"},b.e.noches,"n"):null)}function Calendario({api,token,filtros,propiedades,ultimoMes,facturadoHasta,abrirEstancia}){let movil=useIsMobile(900),[mes,setMes]=(0,import_react4.useState)(ultimoMes),[abiertas,setAbiertas]=(0,import_react4.useState)({}),desde=mes+"-01",hasta=primeroMesSiguiente(mes),f=useScript(api,"portal_facturado",{token,...filtros,desde,hasta,modo:"solape"},!0),COL=movil?30:36,IZQ=movil?128:250,ALTO=34,dias=Math.round((ms(hasta)-ms(desde))/DIA),hoy=new Date().toISOString().slice(0,10),diasFacturables=facturadoHasta?Math.max(0,Math.min(dias,Math.round((ms(facturadoHasta)-ms(desde))/DIA))):dias,filas=(0,import_react4.useMemo)(()=>{if(!f.datos||f.datos.demasiadas)return[];let porProp={};f.datos.estancias.forEach(e=>{!e.ajuste&&!e.solo_limpieza&&(porProp[e.p]=porProp[e.p]||[]).push(e)});let nochesEnMes=est=>est.reduce((s,e)=>{let ini=Math.round((ms(e.entrada)-ms(desde))/DIA);return s+Math.max(0,Math.min(ini+e.noches,diasFacturables)-Math.max(ini,0))},0),out=[];for(let p of propiedades){let est=porProp[p.id]||[];if(p.unidades.length>1){let abierta=abiertas[p.id]!=null?abiertas[p.id]:propiedades.length===1;if(out.push({k:"g"+p.id,tipo:"grupo",p,est,abierta,ocup:diasFacturables?nochesEnMes(est)/(diasFacturables*p.unidades.length)*100:null}),abierta){let porU={};est.forEach(e=>{e.u&&(porU[e.u]=porU[e.u]||[]).push(e)}),[...p.unidades].sort((a,b)=>unidadDe(a.nombre).localeCompare(unidadDe(b.nombre),"es",{numeric:!0})).forEach(u=>{let eu=porU[u.id]||[];out.push({k:"u"+u.id,tipo:"unidad",p,u,est:eu,ocup:diasFacturables?nochesEnMes(eu)/diasFacturables*100:null})});let sin=est.filter(e=>!e.u);sin.length&&out.push({k:"s"+p.id,tipo:"sin",p,est:sin,ocup:null})}}else out.push({k:"p"+p.id,tipo:"piso",p,est,ocup:diasFacturables?nochesEnMes(est)/diasFacturables*100:null})}return out},[f.datos,propiedades,abiertas,desde,diasFacturables]),alternar=(id,abierta)=>setAbiertas(a=>({...a,[id]:!abierta})),listaDias=Array.from({length:dias},(_,i)=>{let d2=new Date(ms(desde)+i*DIA);return{n:i+1,dow:d2.getUTCDay(),ymd:d2.toISOString().slice(0,10)}}),canales=f.datos&&!f.datos.demasiadas?f.datos.canales.map(c=>c.canal):[],ancho=IZQ+dias*COL,lineas=`repeating-linear-gradient(90deg, transparent 0, transparent ${COL-1}px, #f0f0f2 ${COL-1}px, #f0f0f2 ${COL}px)`;return __gh("div",{className:"p-grid","data-gufi-src":"calendario.tsx:107"},__gh("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:10},"data-gufi-src":"calendario.tsx:108"},__gh("div",{style:{display:"flex",alignItems:"center",gap:4},"data-gufi-src":"calendario.tsx:109"},__gh("button",{className:"p-btn",style:{width:34,padding:0},onClick:()=>setMes(mesMas(mes,-1)),"aria-label":"Mes anterior","data-gufi-src":"calendario.tsx:110"},__gh(import_lucide_react4.ChevronLeft,{size:16})),__gh("div",{style:{minWidth:150,textAlign:"center",fontSize:17,fontWeight:600,letterSpacing:"-.3px",color:B.ink},"data-gufi-src":"calendario.tsx:111"},MES[Number(mes.slice(5))]," ",mes.slice(0,4)),__gh("button",{className:"p-btn",style:{width:34,padding:0},onClick:()=>setMes(mesMas(mes,1)),"aria-label":"Mes siguiente","data-gufi-src":"calendario.tsx:112"},__gh(import_lucide_react4.ChevronRight,{size:16}))),mes!==ultimoMes?__gh("button",{className:"p-btn p-btn-s",onClick:()=>setMes(ultimoMes),"data-gufi-src":"calendario.tsx:114"},deFactura()?"\xDAltimo mes facturado":"Este mes"):null,__gh("div",{className:"p-note",style:{marginLeft:"auto",gap:14,flexWrap:"wrap"},"data-gufi-src":"calendario.tsx:115"},canales.map(c=>__gh("span",{key:c,style:{display:"inline-flex",alignItems:"center",gap:6},"data-gufi-src":"calendario.tsx:116"},__gh("span",{className:"p-dot",style:{background:canalColor(c)},"data-gufi-src":"calendario.tsx:116"}),c)),diasFacturablesultimoMes?__gh("div",{className:"p-note",style:{background:"#fff",border:`1px solid ${B.hair}`,borderRadius:12,padding:"10px 14px"},"data-gufi-src":"calendario.tsx:122"},marca().nombre," todav\xEDa no ha facturado ",mesLabel(mes).toLowerCase(),". S\xF3lo aparecen las estancias largas que ya se han facturado en parte."):null,__gh("div",{className:"p-card",style:{overflow:"hidden",position:"relative"},"data-gufi-src":"calendario.tsx:127"},f.error?__gh(Vacio,{titulo:"No se ha podido cargar el calendario",texto:f.error}):f.datos&&f.datos.demasiadas?__gh(Vacio,{titulo:"Demasiadas estancias para un solo calendario",texto:"Elige un propietario para ver su calendario."}):__gh("div",{style:{overflow:"auto",maxHeight:"calc(100vh - 230px)",minHeight:240},"data-gufi-src":"calendario.tsx:131"},__gh("div",{style:{width:ancho,position:"relative"},"data-gufi-src":"calendario.tsx:132"},__gh("div",{style:{display:"flex",position:"sticky",top:0,zIndex:4,background:"#fff",borderBottom:`1px solid ${B.hair}`},"data-gufi-src":"calendario.tsx:134"},__gh("div",{style:{width:IZQ,flexShrink:0,position:"sticky",left:0,zIndex:5,background:"#fff",borderRight:`1px solid ${B.hair}`,padding:"10px 14px",fontSize:12,color:B.muted,display:"flex",alignItems:"flex-end"},"data-gufi-src":"calendario.tsx:135"},num(propiedades.length)," ",propiedades.length===1?"propiedad":"propiedades"),listaDias.map(d2=>{let finde=d2.dow===0||d2.dow===6,esHoy=d2.ymd===hoy;return __gh("div",{key:d2.n,style:{width:COL,flexShrink:0,textAlign:"center",padding:"7px 0 6px",background:finde?"#fafafb":"#fff"},"data-gufi-src":"calendario.tsx:142"},__gh("div",{style:{fontSize:10,color:B.faint},"data-gufi-src":"calendario.tsx:143"},INICIAL[d2.dow]),__gh("div",{className:"b-num",style:{fontSize:12.5,fontWeight:esHoy?700:500,color:esHoy?"#fff":B.ink,width:22,height:22,lineHeight:"22px",borderRadius:999,margin:"2px auto 0",background:esHoy?B.accent:"transparent"},"data-gufi-src":"calendario.tsx:144"},d2.n))})),__gh("div",{style:{position:"absolute",left:IZQ,top:0,bottom:0,width:dias*COL,pointerEvents:"none",zIndex:0},"data-gufi-src":"calendario.tsx:151"},listaDias.map((d2,i)=>{let sinFacturar=i>=diasFacturables,finde=d2.dow===0||d2.dow===6;return!sinFacturar&&!finde?null:__gh("div",{key:d2.n,style:{position:"absolute",left:i*COL,width:COL,top:0,bottom:0,background:sinFacturar?"repeating-linear-gradient(135deg,#f3f3f5 0,#f3f3f5 2px,transparent 2px,transparent 6px)":"#fafafb"},"data-gufi-src":"calendario.tsx:156"})})),f.cargando?__gh("div",{style:{padding:60,display:"flex",justifyContent:"center",position:"sticky",left:0,width:"min(100%, 100vw)"},"data-gufi-src":"calendario.tsx:161"},__gh(import_lucide_react4.Loader2,{className:"animate-spin",style:{color:B.accent}})):filas.map(fila=>{if(fila.tipo==="grupo"){let ocupDia=new Array(dias).fill(0);fila.est.forEach(e=>{let ini=Math.round((ms(e.entrada)-ms(desde))/DIA);for(let k=Math.max(0,ini);kalternar(fila.p.id,fila.abierta),style:{border:"none",width:IZQ,flexShrink:0,position:"sticky",left:0,zIndex:3,background:fila.abierta?"#fbfaf9":"#fff",borderRight:`1px solid ${B.hair}`,padding:"8px 12px",display:"flex",alignItems:"center",gap:8,cursor:"pointer",textAlign:"left"},"data-gufi-src":"calendario.tsx:170"},__gh(import_lucide_react4.ChevronDown,{size:15,style:{color:B.muted,transform:fila.abierta?"none":"rotate(-90deg)",transition:"transform .2s",flexShrink:0}}),__gh("span",{style:{minWidth:0},"data-gufi-src":"calendario.tsx:172"},__gh("span",{style:{display:"block",fontSize:13,fontWeight:600,color:B.ink,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"calendario.tsx:173"},fila.p.nombre),__gh("span",{style:{display:"block",fontSize:11.5,color:B.muted,marginTop:1},"data-gufi-src":"calendario.tsx:174"},n," unidades",fila.ocup!=null?` \xB7 ${pct(fila.ocup)}`:""))),__gh("div",{style:{display:"flex",alignItems:"center",height:44},"data-gufi-src":"calendario.tsx:177"},ocupDia.map((c,i)=>{let p=i55?"#fff":B.sub},"data-gufi-src":"calendario.tsx:180"},p==null||movil?"":Math.round(p))})))}let barras=enCarriles(fila.est,desde),carriles=Math.max(1,...barras.map(b=>b.carril+1)),nombre=fila.tipo==="unidad"?unidadDe(fila.u.nombre):fila.tipo==="sin"?"Sin cama asignada":fila.p.nombre,sub=fila.tipo==="sin"?`${num(fila.est.length)} estancias sin casar con su cama`:null;return __gh("div",{key:fila.k,style:{display:"flex",position:"relative",zIndex:1,borderBottom:`1px solid ${fila.tipo==="piso"?B.hair:"#f0f0f2"}`},"data-gufi-src":"calendario.tsx:191"},__gh("div",{style:{width:IZQ,flexShrink:0,position:"sticky",left:0,zIndex:3,background:"#fff",borderRight:`1px solid ${B.hair}`,padding:fila.tipo==="piso"?"8px 14px":"6px 14px 6px 36px",display:"flex",flexDirection:"column",justifyContent:"center"},"data-gufi-src":"calendario.tsx:192"},__gh("span",{style:{fontSize:fila.tipo==="piso"?13:12.5,fontWeight:fila.tipo==="piso"?600:500,color:fila.tipo==="sin"?B.amber:B.ink,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},title:nombre,"data-gufi-src":"calendario.tsx:193"},nombre),fila.ocup!=null?__gh("span",{className:"b-num",style:{fontSize:11.5,color:B.muted,marginTop:1},"data-gufi-src":"calendario.tsx:194"},pct(fila.ocup)," ocupado"):sub?__gh("span",{style:{fontSize:11,color:B.muted},"data-gufi-src":"calendario.tsx:194"},sub):null),__gh("div",{style:{position:"relative",width:dias*COL,height:carriles*ALTO+2,backgroundImage:lineas},"data-gufi-src":"calendario.tsx:196"},barras.map(b=>__gh(Barra,{key:b.e.id,b,COL,dias,alto:ALTO,abrirEstancia}))))}),!f.cargando&&f.datos&&!filas.length?__gh(Vacio,{titulo:"Sin propiedades que ense\xF1ar",texto:"Cambia el filtro de propietario o de propiedad."}):null))),__gh("p",{className:"p-note","data-gufi-src":"calendario.tsx:207"},deFactura()?`S\xF3lo aparecen las estancias ya facturadas por ${marca().nombre}. La ocupaci\xF3n de cada fila es la del mes, contando hasta el \xFAltimo d\xEDa facturado.`:"Aparecen las reservas confirmadas. La ocupaci\xF3n de cada fila es la del mes."))}var import_react8=require("react"),import_lucide_react8=require("lucide-react");var import_react5=require("react"),import_lucide_react5=require("lucide-react");var porNoche=(importe,noches)=>noches?money2(importe/noches):null;function Resumen2({liquidacion,base}){let grupos={};liquidacion.secciones.forEach(s=>{s.por_estancia.filter(g=>g.en_factura&&g.base).forEach(g=>{let k=g.concepto;grupos[k]=grupos[k]||{k,n:0,base:0},grupos[k].n+=g.estancias,grupos[k].base+=g.base}),s.gastos.filter(g=>g.en_factura&&g.base).forEach(g=>{let k=g.concepto.split(" - ")[0].trim().toUpperCase();grupos[k]=grupos[k]||{k,n:0,base:0},grupos[k].n+=1,grupos[k].base+=g.base})});let filas=Object.values(grupos).sort((a,b)=>b.base-a.base);if(filas.length<2)return null;let noches=liquidacion.actividad.noches;return __gh("div",{style:{marginTop:14},"data-gufi-src":"desglose.tsx:34"},__gh("div",{className:"p-sec",style:{marginTop:0},"data-gufi-src":"desglose.tsx:35"},"Por concepto"),filas.map(g=>__gh("div",{key:g.k,style:{display:"grid",gridTemplateColumns:"minmax(0,1fr) auto auto",gap:12,alignItems:"baseline",padding:"7px 0",borderBottom:"1px solid #f0f0f2",fontSize:13},"data-gufi-src":"desglose.tsx:37"},__gh("span",{style:{minWidth:0,color:B.ink},"data-gufi-src":"desglose.tsx:38"},g.k.charAt(0)+g.k.slice(1).toLowerCase()," ",__gh("span",{style:{color:B.faint},"data-gufi-src":"desglose.tsx:38"},"\xB7 ",num(g.n)," ",g.n===1?"l\xEDnea":"l\xEDneas",base?` \xB7 ${Math.round(g.base/base*100)} %`:"")),__gh("span",{className:"b-num",style:{color:B.muted,fontSize:12},"data-gufi-src":"desglose.tsx:39"},noches?`${porNoche(g.base,noches)}/noche`:""),__gh("span",{className:"b-num",style:{color:B.ink,fontWeight:600,minWidth:90,textAlign:"right"},"data-gufi-src":"desglose.tsx:40"},money2(g.base)))))}function Seccion({s,noches}){let conImporte=s.gastos.filter(g=>g.en_factura||g.base),aCero=s.gastos.filter(g=>!g.en_factura&&!g.base),vacia=!s.por_estancia.length&&!conImporte.length;return __gh("div",{style:{marginTop:18},"data-gufi-src":"desglose.tsx:52"},__gh("div",{style:{display:"flex",alignItems:"baseline",gap:10,paddingBottom:8,borderBottom:`1px solid ${B.hair}`},"data-gufi-src":"desglose.tsx:53"},__gh("span",{className:"p-sec",style:{margin:0},"data-gufi-src":"desglose.tsx:54"},s.titulo),__gh("span",{className:"b-num",style:{marginLeft:"auto",fontSize:14,fontWeight:600,color:vacia?B.faint:B.ink},"data-gufi-src":"desglose.tsx:55"},money2(s.base))),s.base&&noches?__gh("div",{className:"p-note",style:{marginTop:6},"data-gufi-src":"desglose.tsx:57"},"\u2248 ",porNoche(s.base,noches)," por noche liquidada"):null,s.fuera?__gh("div",{className:"p-note",style:{marginTop:6,color:B.amber},"data-gufi-src":"desglose.tsx:58"},"+ ",money2(s.fuera)," en la liquidaci\xF3n que no van en esta factura"):null,s.por_estancia.map((g,k)=>__gh("div",{key:k,style:{padding:"11px 0",borderBottom:"1px solid #f0f0f2"},"data-gufi-src":"desglose.tsx:61"},__gh("div",{style:{display:"flex",gap:12,alignItems:"baseline"},"data-gufi-src":"desglose.tsx:62"},__gh("span",{style:{fontSize:13.5,fontWeight:600,color:B.ink},"data-gufi-src":"desglose.tsx:63"},g.concepto),__gh("span",{className:"b-num",style:{marginLeft:"auto",fontSize:13.5,fontWeight:600,color:g.en_factura?B.ink:B.faint},"data-gufi-src":"desglose.tsx:64"},money2(g.base))),__gh("div",{style:{fontSize:12.5,color:B.muted,marginTop:3,lineHeight:1.5},"data-gufi-src":"desglose.tsx:66"},g.criterio?`${g.criterio} \xB7 `:"",num(g.estancias)," estancias \xB7 ",num(g.noches)," noches \xB7 sobre ",money2(g.sobre)," facturados"),g.en_factura?null:__gh("div",{style:{fontSize:12,color:B.amber,marginTop:3},"data-gufi-src":"desglose.tsx:69"},"Est\xE1n en la liquidaci\xF3n, pero no en esta factura"))),conImporte.map((g,k)=>__gh("div",{key:k,style:{padding:"11px 0",borderBottom:"1px solid #f0f0f2"},"data-gufi-src":"desglose.tsx:74"},__gh("div",{style:{display:"flex",gap:12,alignItems:"baseline"},"data-gufi-src":"desglose.tsx:75"},__gh("span",{style:{fontSize:13.5,fontWeight:600,color:B.ink,minWidth:0},"data-gufi-src":"desglose.tsx:76"},g.concepto),__gh("span",{className:"b-num",style:{marginLeft:"auto",fontSize:13.5,fontWeight:600,color:g.en_factura?B.ink:B.faint,flexShrink:0},"data-gufi-src":"desglose.tsx:77"},money2(g.base))),__gh("div",{style:{fontSize:12.5,color:B.muted,marginTop:3,lineHeight:1.5},"data-gufi-src":"desglose.tsx:79"},[g.criterio,g.aplicado,g.gasto!=null&&Math.abs(g.gasto-g.base)>=.01?`gasto de origen ${money2(g.gasto)}`:null].filter(Boolean).join(" \xB7 ")),g.proveedor||g.factura_proveedor||g.origen?__gh("div",{style:{fontSize:12.5,color:B.muted,marginTop:1,lineHeight:1.5},"data-gufi-src":"desglose.tsx:83"},g.origen?g.origen:[g.proveedor,g.factura_proveedor?`factura ${g.factura_proveedor}`:null,g.factura_proveedor_fecha?`del ${fmtLarga(g.factura_proveedor_fecha)}`:null].filter(Boolean).join(" \xB7 ")):null,g.en_factura?null:__gh("div",{style:{fontSize:12,color:B.amber,marginTop:3},"data-gufi-src":"desglose.tsx:87"},"En la liquidaci\xF3n, pero no en esta factura"))),aCero.length?__gh("div",{className:"p-note",style:{marginTop:8,lineHeight:1.5,display:"block"},"data-gufi-src":"desglose.tsx:92"},"A 0 \u20AC este mes: ",aCero.map(g=>g.concepto).join(", "),"."):null)}function Desglose({api,token,factura,nombrePiso,onVolver}){let d2=useScript(api,"portal_factura_desglose",{token,facturaId:factura.id},!0),[exportando,setExportando]=(0,import_react5.useState)("");async function exportar2(){setExportando("\u2026");try{let filas=[];d2.datos.liquidaciones.forEach(l=>l.secciones.forEach(s=>{s.por_estancia.forEach(g=>filas.push([nombrePiso(l),s.titulo,g.concepto,g.criterio||"",`${g.estancias} estancias \xB7 ${g.noches} noches \xB7 sobre ${g.sobre} \u20AC`,"","","","",g.base,g.iva,g.total,g.en_factura?"S\xED":"No"])),s.gastos.forEach(g=>filas.push([nombrePiso(l),s.titulo,g.concepto,g.criterio||"",g.aplicado||"",g.origen||g.proveedor||"",g.factura_proveedor||"",g.factura_proveedor_fecha||g.fecha||"",g.gasto,g.base,g.iva,g.total,g.en_factura?"S\xED":"No"]))})),await exportarTabla(`Desglose_${limpioArchivo(d2.datos.factura.numero)}.xlsx`,"Desglose",`Desglose de la factura ${d2.datos.factura.numero}`,`Base ${money2(d2.datos.factura.base)} \xB7 IVA ${money2(d2.datos.factura.iva)} \xB7 Total ${money2(d2.datos.factura.total)}`,[{t:"Propiedad",w:28},{t:"Secci\xF3n",w:20},{t:"Concepto",w:40},{t:"Criterio",w:22},{t:"C\xF3mo se aplic\xF3",w:30},{t:"Proveedor",w:32},{t:"Factura del proveedor",w:22},{t:"Fecha",w:12,fecha:!0},{t:"Gasto de origen",w:15,eur:!0},{t:"Base",w:13,eur:!0},{t:"IVA",w:11,eur:!0},{t:"Total",w:13,eur:!0},{t:"En esta factura",w:14}],filas),setExportando("")}catch(e){setExportando(String(e&&e.message||e))}}return __gh(Pagina,{titulo:`Desglose \xB7 ${factura.numero}`,sub:factura.periodo?`Liquidaci\xF3n de ${fmtLarga(factura.periodo.desde)} a ${fmtLarga(factura.periodo.hasta)}`:fmtLarga(factura.fecha),onVolver,accion:d2.datos&&d2.datos.liquidaciones.length?__gh("span",{style:{display:"inline-flex",flexDirection:"column",alignItems:"flex-end",gap:4},"data-gufi-src":"desglose.tsx:123"},__gh("button",{className:"p-btn",onClick:exportar2,disabled:exportando==="\u2026","data-gufi-src":"desglose.tsx:124"},__gh(import_lucide_react5.Download,{size:15}),exportando==="\u2026"?"Preparando\u2026":"Desglose en Excel"),exportando&&exportando!=="\u2026"?__gh("span",{style:{fontSize:12,color:B.red,maxWidth:240,textAlign:"right"},"data-gufi-src":"desglose.tsx:125"},exportando):null):null},d2.error?__gh(Vacio,{titulo:"No se ha podido leer el desglose",texto:d2.error}):d2.cargando?__gh("div",{style:{padding:50,display:"flex",justifyContent:"center"},"data-gufi-src":"desglose.tsx:129"},__gh(import_lucide_react5.Loader2,{className:"animate-spin",style:{color:B.accent}})):d2.datos.sin_liquidacion?__gh(Vacio,{titulo:"Esta factura no sale de una liquidaci\xF3n",texto:"Es una factura suelta (una obra, una gesti\xF3n\u2026): su detalle es el propio PDF."}):__gh(__gf,null,__gh("div",{className:"p-kv","data-gufi-src":"desglose.tsx:133"},__gh("span",{"data-gufi-src":"desglose.tsx:133"},"Base imponible"),__gh("span",{"data-gufi-src":"desglose.tsx:133"},money2(d2.datos.factura.base))),__gh("div",{className:"p-kv","data-gufi-src":"desglose.tsx:134"},__gh("span",{"data-gufi-src":"desglose.tsx:134"},"IVA"),__gh("span",{"data-gufi-src":"desglose.tsx:134"},money2(d2.datos.factura.iva))),__gh("div",{className:"p-kv","data-gufi-src":"desglose.tsx:135"},__gh("span",{"data-gufi-src":"desglose.tsx:135"},"Total"),__gh("span",{style:{fontWeight:600},"data-gufi-src":"desglose.tsx:135"},money2(d2.datos.factura.total))),d2.datos.liquidaciones.map(l=>__gh("div",{key:l.id,style:{marginTop:22},"data-gufi-src":"desglose.tsx:137"},d2.datos.liquidaciones.length>1?__gh("div",{style:{fontSize:15,fontWeight:600,color:B.ink},"data-gufi-src":"desglose.tsx:138"},nombrePiso(l)):null,__gh("div",{style:{marginTop:6,padding:"12px 14px",borderRadius:14,background:"#f7f7f8",fontSize:13,color:B.muted,lineHeight:1.55},"data-gufi-src":"desglose.tsx:139"},__gh("b",{style:{color:B.ink},"data-gufi-src":"desglose.tsx:140"},"Actividad liquidada:")," ",num(l.actividad.estancias)," estancias y ",num(l.actividad.noches)," noches entre el ",fmtLarga(l.desde)," y el ",fmtLarga(l.hasta),".",l.actividad.noches?__gh(__gf,null," Esta factura sale a ",__gh("b",{style:{color:B.ink},"data-gufi-src":"desglose.tsx:141"},porNoche(d2.datos.factura.base,l.actividad.noches))," de base por noche."):null),__gh(Resumen2,{liquidacion:l,base:d2.datos.factura.base}),l.notas.map((n,k)=>__gh("div",{key:k,style:{marginTop:10,padding:"12px 14px",borderRadius:14,background:"rgba(180,83,9,.06)",border:"1px solid rgba(180,83,9,.18)",fontSize:12.5,color:"#7c4a0f",lineHeight:1.55,whiteSpace:"pre-line"},"data-gufi-src":"desglose.tsx:145"},__gh("b",{"data-gufi-src":"desglose.tsx:146"},"Nota de ",marca().nombre,":")," ",n)),l.secciones.map((s,k)=>__gh(Seccion,{key:k,s,noches:l.actividad.noches}))))))}var import_react6=__toESM(require("react")),import_lucide_react6=require("lucide-react");var AEAT={aceptada:{grupo:"enviadas",t:"Enviada a la AEAT",c:B.green,Icono:import_lucide_react6.ShieldCheck},aceptada_con_errores:{grupo:"enviadas",t:"Aceptada con avisos",c:B.amber,Icono:import_lucide_react6.ShieldCheck},pendiente:{grupo:"pendientes",t:"Pendiente de env\xEDo",c:B.amber,Icono:import_lucide_react6.Clock},preparado:{grupo:"pendientes",t:"Pendiente de env\xEDo",c:B.amber,Icono:import_lucide_react6.Clock},enviado:{grupo:"pendientes",t:"Pendiente de env\xEDo",c:B.amber,Icono:import_lucide_react6.Clock},en_duda:{grupo:"pendientes",t:"Comprobando con la AEAT",c:B.amber,Icono:import_lucide_react6.Clock},rechazada:{grupo:"rechazadas",t:"Rechazada",c:B.red,Icono:import_lucide_react6.AlertTriangle},error:{grupo:"rechazadas",t:"Error en el env\xEDo",c:B.red,Icono:import_lucide_react6.AlertTriangle},no_aplica:{grupo:"sin_envio",t:"Sellada, sin env\xEDo",c:B.muted,Icono:import_lucide_react6.Shield}},SIN_SELLAR={grupo:"sin_envio",t:"Sin sellar",c:B.amber,Icono:import_lucide_react6.Shield},SELLADA_SIN_REGISTRO={grupo:"sin_envio",t:"Sellada, sin env\xEDo",c:B.muted,Icono:import_lucide_react6.Shield};function aeatDe(f){return f.sellada?f.remision_estado==null?SELLADA_SIN_REGISTRO:AEAT[f.remision_estado]||{grupo:"otro",t:String(f.remision_estado),c:B.muted,Icono:import_lucide_react6.Shield}:SIN_SELLAR}var FILTROS_AEAT=[{k:"todas",t:"Todas",c:void 0},{k:"enviadas",t:"Enviadas",c:B.green},{k:"pendientes",t:"Pendientes",c:B.amber},{k:"rechazadas",t:"Rechazadas",c:B.red},{k:"sin_envio",t:"Sin env\xEDo",c:void 0},{k:"otro",t:"Otro estado",c:void 0}];function contarAeat(lista){let n={enviadas:0,pendientes:0,rechazadas:0,sin_envio:0,otro:0,primera:""};return lista.forEach(f=>{let g=aeatDe(f).grupo;n[g]+=1,g==="enviadas"&&(!n.primera||f.fecha80?`${m.slice(0,79)}\u2026`:m}function Verifactu({f}){let a=aeatDe(f),Icono=a.Icono,conMotivo=!!f.remision_respuesta&&(a.grupo==="rechazadas"||f.remision_estado==="aceptada_con_errores"),cotejo=a.grupo==="enviadas"&&f.verifactu_qr?f.verifactu_qr:"";return __gh("span",{style:{display:"inline-flex",flexDirection:"column",gap:1,maxWidth:240},"data-gufi-src":"facturas_huesped.tsx:91"},__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:5,fontSize:12.5,fontWeight:600,color:a.c},title:conMotivo?f.remision_respuesta:void 0,"data-gufi-src":"facturas_huesped.tsx:92"},__gh(Icono,{size:13}),a.t),f.remision_csv||cotejo?cotejo?__gh("a",{href:cotejo,target:"_blank",rel:"noopener noreferrer",style:{fontSize:11.5,color:B.accent,textDecoration:"underline",textUnderlineOffset:2},title:"Abrir el cotejo de esta factura en la web de la AEAT","data-gufi-src":"facturas_huesped.tsx:98"},f.remision_csv?`CSV ${f.remision_csv}`:"Ver en la AEAT"):__gh("span",{style:{fontSize:11.5,color:B.sub},"data-gufi-src":"facturas_huesped.tsx:100"},"CSV ",f.remision_csv):null,conMotivo?__gh("span",{style:{fontSize:11.5,color:a.c,whiteSpace:"normal",lineHeight:1.35},title:f.remision_respuesta,"data-gufi-src":"facturas_huesped.tsx:102"},motivoCorto(f.remision_respuesta)):null,f.sellada?__gh("span",{style:{fontSize:11.5,color:B.faint},title:`Huella ${f.huella}\u2026`,"data-gufi-src":"facturas_huesped.tsx:103"},"huella ",f.huella,"\u2026"):null)}function BotonPdf({api,token,f}){let[estado,setEstado]=(0,import_react6.useState)("");async function bajar(){setEstado("\u2026");try{let r=await api("portal_factura_pdf",{token,facturaId:f.id});descargarPdfBase64(r.pdf,r.filename),setEstado("")}catch(e){setEstado(String(e&&e.message||e))}}return f.estado==="revision"?__gh("span",{style:{fontSize:12,color:B.amber},title:f.aviso||"","data-gufi-src":"facturas_huesped.tsx:115"},"a revisar"):__gh("span",{style:{display:"inline-flex",flexDirection:"column",alignItems:"flex-end"},"data-gufi-src":"facturas_huesped.tsx:117"},__gh("button",{className:"p-btn p-btn-s",onClick:bajar,disabled:estado==="\u2026","data-gufi-src":"facturas_huesped.tsx:118"},estado==="\u2026"?__gh(import_lucide_react6.Loader2,{size:13,className:"animate-spin"}):__gh(import_lucide_react6.Download,{size:13}),"PDF"),estado&&estado!=="\u2026"?__gh("span",{style:{fontSize:11.5,color:B.red,maxWidth:200,textAlign:"right",whiteSpace:"normal"},"data-gufi-src":"facturas_huesped.tsx:121"},estado):null)}function Automatico({series,verifactu,aeat}){let activas=(series||[]).filter(s=>s.activa);if(!activas.length)return null;let auto=activas.filter(s=>s.auto_emitir&&s.auto_desde),on=auto.length===activas.length,remite=verifactu&&verifactu.modo==="verifactu",firmado=!!(verifactu&&verifactu.mandato&&verifactu.mandato.estado==="firmado");return __gh("div",{className:"p-card",style:{padding:"14px 18px",display:"flex",gap:12,alignItems:"flex-start"},"data-gufi-src":"facturas_huesped.tsx:140"},__gh(import_lucide_react6.BadgeCheck,{size:18,style:{color:on?B.green:B.amber,flexShrink:0,marginTop:1}}),__gh("div",{style:{fontSize:13,color:B.sub,lineHeight:1.6},"data-gufi-src":"facturas_huesped.tsx:142"},on?__gh(__gf,null,__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:145"},"Las facturas se emiten solas.")," Cada noche se facturan las estancias que ya han entrado y no tienen factura, en la serie ",__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:146"},auto.map(x=>x.prefijo||x.serie).join(" \xB7 "))," ","y desde el ",fmtDate(auto[0].auto_desde),"."):__gh(__gf,null,__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:151"},"La emisi\xF3n autom\xE1tica no est\xE1 puesta")," en la serie"," ",__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:152"},activas.filter(x=>!(x.auto_emitir&&x.auto_desde)).map(x=>x.prefijo||x.serie).join(" \xB7 ")),": esas facturas hay que emitirlas a mano."),verifactu&&verifactu.nif?__gh("div",{style:{marginTop:6,color:B.muted},"data-gufi-src":"facturas_huesped.tsx:157"},"Emite ",__gh("b",{style:{color:B.sub},"data-gufi-src":"facturas_huesped.tsx:158"},verifactu.razon_social)," (",verifactu.nif,")."," ",remite?firmado?aeat.enviadas?__gh(__gf,null,"Desde el ",fmtLarga(aeat.primera),", cada factura se sella con huella encadenada y ",__gh("b",{style:{color:B.sub},"data-gufi-src":"facturas_huesped.tsx:167"},"se env\xEDa a la Agencia Tributaria"),"."):__gh(__gf,null,"Cada factura se sella con huella encadenada para enviarse a la Agencia Tributaria, pero ",__gh("b",{style:{color:B.sub},"data-gufi-src":"facturas_huesped.tsx:168"},"todav\xEDa no ha salido ninguna"),"."):__gh(__gf,null,"Cada factura se sella con huella encadenada, pero ",__gh("b",{style:{color:B.sub},"data-gufi-src":"facturas_huesped.tsx:165"},"todav\xEDa no se env\xEDa a la Agencia Tributaria"),": falta que ",verifactu.razon_social," firme el mandato de representaci\xF3n. Hasta que est\xE9 firmado no sale ninguna factura."):__gh(__gf,null,"Cada factura se sella con huella encadenada y se conserva; ",__gh("b",{style:{color:B.sub},"data-gufi-src":"facturas_huesped.tsx:163"},"no se manda nada a la AEAT")," (modo \xABsolo facturar\xBB)."),remite?__gh("div",{style:{marginTop:4},"data-gufi-src":"facturas_huesped.tsx:170"},"Ante la AEAT: ",__gh("b",{style:{color:aeat.enviadas?B.green:B.sub},"data-gufi-src":"facturas_huesped.tsx:171"},num(aeat.enviadas)," ",aeat.enviadas===1?"enviada":"enviadas")," \xB7 ",__gh("b",{style:{color:aeat.pendientes?B.amber:B.sub},"data-gufi-src":"facturas_huesped.tsx:172"},num(aeat.pendientes)," ",aeat.pendientes===1?"pendiente":"pendientes")," \xB7 ",__gh("b",{style:{color:aeat.rechazadas?B.red:B.sub},"data-gufi-src":"facturas_huesped.tsx:173"},num(aeat.rechazadas)," ",aeat.rechazadas===1?"rechazada":"rechazadas")," \xB7 ",num(aeat.sin_envio)," sin env\xEDo",aeat.otro?__gh(__gf,null," \xB7 ",__gh("b",{style:{color:B.sub},"data-gufi-src":"facturas_huesped.tsx:174"},num(aeat.otro)," en otro estado")):null,"."):null):null))}function incidenciaDe(f){let resp=String(f.remision_respuesta||""),codigo=(resp.match(/\[(\d{4})\]/)||[])[1]||"",detalle=resp.replace(/^.*?\[\d{4}\]\s*/,"").replace(/;?\s*envío de \d+ registros?\s*$/,"");return f.remision_estado==="rechazada"?`Rechazada por Hacienda${codigo?` (${codigo})`:""}: ${detalle}`:f.remision_estado==="error"?"No lleg\xF3 a Hacienda: se reintenta sola cada hora":f.remision_estado==="aceptada_con_errores"&&codigo!=="2001"?`Aceptada con aviso ${codigo}: ${detalle}`:(f.remision_estado==="aceptada"||f.remision_estado==="aceptada_con_errores")&&f.tipo==="completa"&&f.tipo_aeat==="F2"?"En el papel es completa y Hacienda la tiene como simplificada: revisa el documento del hu\xE9sped":""}function Incidencias({lista,onVer}){return __gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"facturas_huesped.tsx:206"},__gh("div",{style:{display:"flex",gap:12,alignItems:"flex-start",padding:"14px 18px",borderBottom:`1px solid ${B.hair}`},"data-gufi-src":"facturas_huesped.tsx:207"},__gh(import_lucide_react6.AlertTriangle,{size:18,style:{color:B.red,flexShrink:0,marginTop:1}}),__gh("div",{style:{fontSize:13,color:B.sub,lineHeight:1.6,flex:1},"data-gufi-src":"facturas_huesped.tsx:209"},__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:210"},lista.length===1?"Una factura no est\xE1 como debe en Hacienda":`${num(lista.length)} facturas no est\xE1n como deben en Hacienda`),". Pulsa una para verla en la lista.")),__gh("div",{style:{maxHeight:260,overflowY:"auto"},"data-gufi-src":"facturas_huesped.tsx:213"},lista.map(({f,motivo})=>__gh("button",{key:f.id,onClick:()=>onVer(f.numero_completo),className:"b-press",style:{display:"flex",gap:12,alignItems:"center",width:"100%",padding:"10px 18px",border:"none",borderBottom:"1px solid #f0f0f2",background:"transparent",textAlign:"left",cursor:"pointer",font:"inherit",fontSize:13},"data-gufi-src":"facturas_huesped.tsx:215"},__gh("span",{style:{flex:1,minWidth:0},"data-gufi-src":"facturas_huesped.tsx:217"},__gh("span",{style:{display:"block",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:B.ink},"data-gufi-src":"facturas_huesped.tsx:218"},__gh("span",{className:"b-num","data-gufi-src":"facturas_huesped.tsx:219"},f.numero_completo)," ",f.destinatario_nombre||f.nombres_huespedes||""," ",__gh("span",{style:{color:B.faint},"data-gufi-src":"facturas_huesped.tsx:219"},"\xB7 ",fmtLarga(f.fecha))),__gh("span",{style:{display:"flex",alignItems:"center",gap:6,color:B.muted,fontSize:12,marginTop:2},"data-gufi-src":"facturas_huesped.tsx:221"},__gh("span",{style:{width:6,height:6,borderRadius:3,background:B.red,flexShrink:0},"data-gufi-src":"facturas_huesped.tsx:222"}),motivo)),__gh("span",{className:"b-num",style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:225"},money2(f.total))))))}var PAISES2=(()=>{let nombre=new Intl.DisplayNames(["es"],{type:"region"});return"AF AL DE AD AO AI AQ AG SA DZ AR AM AW AU AT AZ BS BH BD BB BE BZ BJ BM BY BO BA BW BV BR BN BG BF BI BT CV KY KH CM CA CF CC CO KM CG CD CK KP KR CI CR HR CU TD CZ CL CN CY CW DK DM DO EC EG AE ER SK SI ES US EE ET FO PH FI FJ FR GA GM GE GS GH GI GD GR GL GU GT GG GN GQ GW GY HT HM HN HK HU IN ID IR IQ IE IM IS IL IT JM JP JE JO KZ KE KG KI KW LA LS LV LB LR LY LI LT LU MO MK MG MY MW MV ML MT FK MP MA MH MU MR YT UM MX FM MD MC MN ME MS MZ MM NA NR CX NP NI NE NG NU NF NO NC NZ IO OM NL BQ PK PW PA PG PY PE PN PF PL PT PR QA GB RW RO RU RE SB SV WS AS KN SM SX PM VC SH LC ST SN RS SC SL SG SY SO LK SZ ZA SD SS SE CH SR TH TW TZ TJ PS TF TL TG TK TO TT TN TC TM TR TV UA UG UY UZ VU VA VE VN VG VI WF YE DJ ZM ZW".split(" ").map(c=>({c,n:nombre.of(c)})).filter(x=>x.n&&x.n!==x.c).sort((a,b)=>a.c==="ES"?-1:b.c==="ES"?1:a.n.localeCompare(b.n,"es"))})(),TIPOS_DOC=[["nif","DNI o NIE (Espa\xF1a)"],["pasaporte","Pasaporte"],["documento_identidad","Documento de identidad de otro pa\xEDs"],["otro","Otro documento"]],INPUT={border:`1px solid ${B.hair}`,borderRadius:10,padding:"8px 10px",fontSize:13.5,color:B.ink,background:"#fff",outline:"none",font:"inherit",width:"100%",boxSizing:"border-box"},Campo=({l,ancho,children})=>__gh("label",{style:{display:"flex",flexDirection:"column",gap:4,fontSize:12,color:B.muted,gridColumn:ancho?"1 / -1":void 0},"data-gufi-src":"facturas_huesped.tsx:262"},l,children);function CompletarHuesped({api,token,p,onHecho}){let[estado,setEstado]=(0,import_react6.useState)("cargando"),[faltan,setFaltan]=(0,import_react6.useState)([]),[yaVale,setYaVale]=(0,import_react6.useState)(!1),[err,setErr]=(0,import_react6.useState)(""),[hecha,setHecha]=(0,import_react6.useState)(""),[d2,setD]=(0,import_react6.useState)({nombre:"",tipo:"pasaporte",documento:"",pais:"",direccion:""}),pon=k=>e=>setD(x=>({...x,[k]:e.target.value}));(0,import_react6.useEffect)(()=>{let vivo=!0;return api("portal_factura_emitir",{token,reservaId:p.reserva,solo_comprobar:!0}).then(r=>{if(!vivo)return;if(r&&r.ok){setYaVale(!0),setEstado("listo");return}if(r&&r.motivo==="YA_FACTURADA"){setHecha((r.facturas||[]).join(", ")),setEstado("hecho");return}let x=r&&r.datos||{};setFaltan(r&&r.faltan||[]),setD({nombre:x.nombre||p.huesped||"",tipo:x.tipo||"pasaporte",documento:x.documento||"",pais:x.pais||"",direccion:x.direccion||""}),setEstado("listo")}).catch(ex=>{vivo&&(setErr(String(ex&&ex.message||ex)),setEstado("listo"))}),()=>{vivo=!1}},[p.reserva]);async function facturar(modo){setEstado("guardando"),setErr("");try{let r=await api("portal_factura_emitir",modo==="datos"?{token,reservaId:p.reserva,destinatario_nombre:d2.nombre,destinatario_tipo_documento:d2.tipo,destinatario_nif:d2.documento,destinatario_pais_documento:d2.tipo==="nif"?"ES":d2.pais,destinatario_direccion:d2.direccion}:{token,reservaId:p.reserva});if(r&&r.ok&&r.factura){setHecha(r.factura.numero_completo),setEstado("hecho"),onHecho();return}setErr(r&&r.mensaje||"No se pudo emitir la factura"),setEstado("listo")}catch(ex){setErr(String(ex&&ex.message||ex)),setEstado("listo")}}let caja={padding:"12px 18px 16px",background:"#fafafb",borderBottom:"1px solid #f0f0f2",fontSize:13},boton=(texto,onClick)=>__gh("button",{onClick,disabled:estado==="guardando",className:"p-pill b-press",style:{cursor:"pointer",color:B.accent,fontWeight:600,display:"inline-flex",alignItems:"center",gap:6},"data-gufi-src":"facturas_huesped.tsx:306"},estado==="guardando"?__gh(import_lucide_react6.Loader2,{size:13,className:"animate-spin"}):null,texto),error=err?__gh("div",{style:{color:B.red,fontSize:12.5,marginTop:8},"data-gufi-src":"facturas_huesped.tsx:311"},err):null;return estado==="cargando"?__gh("div",{style:caja,"data-gufi-src":"facturas_huesped.tsx:313"},__gh(import_lucide_react6.Loader2,{size:14,className:"animate-spin",style:{color:B.accent}})):estado==="hecho"?__gh("div",{style:{...caja,display:"flex",alignItems:"center",gap:8,color:B.sub},"data-gufi-src":"facturas_huesped.tsx:316"},__gh("span",{style:{width:6,height:6,borderRadius:3,background:B.green,flexShrink:0},"data-gufi-src":"facturas_huesped.tsx:317"}),"Factura ",__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:318"},hecha)," emitida. Se manda a Hacienda en el momento."):yaVale?__gh("div",{style:caja,"data-gufi-src":"facturas_huesped.tsx:324"},__gh("div",{style:{color:B.sub,marginBottom:10},"data-gufi-src":"facturas_huesped.tsx:325"},"Esta estancia ya tiene todos los datos del hu\xE9sped: se factura sola esta noche. Si la necesitas ya, puedes emitirla ahora."),boton("Emitir factura ahora",()=>facturar("ya")),error):__gh("div",{style:caja,"data-gufi-src":"facturas_huesped.tsx:332"},__gh("div",{style:{fontSize:12,color:B.muted,marginBottom:10},"data-gufi-src":"facturas_huesped.tsx:333"},faltan.length?`Falta: ${faltan.join(", ")}. `:"","Escribe los datos tal como vienen en el documento del hu\xE9sped."),__gh("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(190px, 1fr))",gap:10},"data-gufi-src":"facturas_huesped.tsx:336"},__gh(Campo,{l:"Nombre y apellidos"},__gh("input",{value:d2.nombre,onChange:pon("nombre"),style:INPUT,"data-gufi-src":"facturas_huesped.tsx:337"})),__gh(Campo,{l:"Tipo de documento"},__gh("select",{value:d2.tipo,onChange:pon("tipo"),style:INPUT,"data-gufi-src":"facturas_huesped.tsx:339"},TIPOS_DOC.map(([v,t])=>__gh("option",{key:v,value:v,"data-gufi-src":"facturas_huesped.tsx:340"},t)))),__gh(Campo,{l:"N\xFAmero del documento"},__gh("input",{value:d2.documento,onChange:e=>setD(x=>({...x,documento:e.target.value.toUpperCase()})),style:INPUT,"data-gufi-src":"facturas_huesped.tsx:344"})),d2.tipo!=="nif"?__gh(Campo,{l:"Pa\xEDs que lo expide"},__gh("select",{value:d2.pais,onChange:pon("pais"),style:INPUT,"data-gufi-src":"facturas_huesped.tsx:348"},__gh("option",{value:"","data-gufi-src":"facturas_huesped.tsx:349"},"Elige el pa\xEDs\u2026"),PAISES2.map(x=>__gh("option",{key:x.c,value:x.c,"data-gufi-src":"facturas_huesped.tsx:350"},x.n)))):null,__gh(Campo,{l:"Direcci\xF3n (calle, c\xF3digo postal y ciudad)",ancho:!0},__gh("input",{value:d2.direccion,onChange:pon("direccion"),style:INPUT,"data-gufi-src":"facturas_huesped.tsx:354"}))),error,__gh("div",{style:{display:"flex",flexWrap:"wrap",gap:10,marginTop:12,alignItems:"center"},"data-gufi-src":"facturas_huesped.tsx:357"},boton("Emitir factura",()=>facturar("datos")),__gh("span",{style:{fontSize:12,color:B.faint},"data-gufi-src":"facturas_huesped.tsx:359"},"Sale con fecha de hoy y el importe de la reserva, y se manda a Hacienda.")))}function NoVino({api,token,p,onHecho,onCancelar}){let[estado,setEstado]=(0,import_react6.useState)("listo"),[err,setErr]=(0,import_react6.useState)(""),[hecha,setHecha]=(0,import_react6.useState)("");async function emitir(){setEstado("guardando"),setErr("");try{let r=await api("portal_factura_emitir",{token,reservaId:p.reserva,no_vino:!0});if(r&&r.ok&&r.factura){setHecha(r.factura.numero_completo),setEstado("hecho"),onHecho();return}setErr(r&&r.mensaje||"No se pudo emitir la factura"),setEstado("listo")}catch(ex){setErr(String(ex&&ex.message||ex)),setEstado("listo")}}let caja={padding:"12px 18px 16px",background:"#fafafb",borderBottom:"1px solid #f0f0f2",fontSize:13};return estado==="hecho"?__gh("div",{style:{...caja,display:"flex",alignItems:"center",gap:8,color:B.sub},"data-gufi-src":"facturas_huesped.tsx:385"},__gh("span",{style:{width:6,height:6,borderRadius:3,background:B.green,flexShrink:0},"data-gufi-src":"facturas_huesped.tsx:386"}),"Factura simplificada ",__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:387"},hecha)," emitida. Se manda a Hacienda en el momento."):__gh("div",{style:caja,"data-gufi-src":"facturas_huesped.tsx:392"},__gh("div",{style:{color:B.sub,marginBottom:10},"data-gufi-src":"facturas_huesped.tsx:393"},"Si el hu\xE9sped no vino y pag\xF3 la reserva, se emite una factura simplificada de ",__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:394"},money2(p.importe)),", sin sus datos y con fecha de hoy, y se manda a Hacienda. Una factura emitida ya no se borra."),__gh("div",{style:{display:"flex",flexWrap:"wrap",gap:10,alignItems:"center"},"data-gufi-src":"facturas_huesped.tsx:396"},__gh("button",{onClick:emitir,disabled:estado==="guardando",className:"p-pill b-press",style:{cursor:"pointer",color:B.accent,fontWeight:600,display:"inline-flex",alignItems:"center",gap:6},"data-gufi-src":"facturas_huesped.tsx:397"},estado==="guardando"?__gh(import_lucide_react6.Loader2,{size:13,className:"animate-spin"}):null,"Emitir simplificada"),__gh("button",{onClick:onCancelar,disabled:estado==="guardando",className:"b-press",style:{border:"none",background:"transparent",color:B.muted,fontSize:12.5,cursor:"pointer",padding:0},"data-gufi-src":"facturas_huesped.tsx:401"},"Cancelar")),err?__gh("div",{style:{color:B.red,fontSize:12.5,marginTop:8},"data-gufi-src":"facturas_huesped.tsx:404"},err):null)}function Pendientes({pend,arranque,api,token,recargar}){let lista=pend.lista||[],[abierta,setAbierta]=(0,import_react6.useState)(""),[modo,setModo]=(0,import_react6.useState)(""),abrir=(codigo,m)=>{let cerrar=abierta===codigo&&modo===m;setAbierta(cerrar?"":codigo),setModo(cerrar?"":m)};return __gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"facturas_huesped.tsx:424"},__gh("div",{style:{display:"flex",gap:12,alignItems:"flex-start",padding:"14px 18px",borderBottom:`1px solid ${B.hair}`},"data-gufi-src":"facturas_huesped.tsx:425"},__gh(import_lucide_react6.AlertTriangle,{size:18,style:{color:B.amber,flexShrink:0,marginTop:1}}),__gh("div",{style:{fontSize:13,color:B.sub,lineHeight:1.6,flex:1},"data-gufi-src":"facturas_huesped.tsx:427"},__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:428"},"Quedan ",num(pend.estancias)," estancias sin factura")," desde el inicio de la actividad",arranque?` (${fmtLarga(arranque)})`:"",", por ",__gh("b",{style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:429"},money2(pend.importe)),". La m\xE1s antigua entr\xF3 el ",fmtLarga(pend.mas_antigua),". Se cuentan por estancia: una reserva de varias camas lleva una factura.",pend.hoy?__gh("div",{style:{color:B.muted,marginTop:4},"data-gufi-src":"facturas_huesped.tsx:431"},pend.hoy===1?`La que entra hoy (${money2(pend.hoy_importe)}) se factura sola esta noche si ya tiene los datos del hu\xE9sped.`:`Las ${num(pend.hoy)} que entran hoy (${money2(pend.hoy_importe)}) se facturan solas esta noche las que ya tengan los datos del hu\xE9sped.`):null,__gh("div",{style:{color:B.muted,marginTop:4},"data-gufi-src":"facturas_huesped.tsx:432"},"Todas las facturas son completas, con el nombre, el documento y la direcci\xF3n del hu\xE9sped, as\xED que sin esos datos no se emiten.",pend.sin_datos?` ${pend.sin_datos===1?"Una espera":`${num(pend.sin_datos)} esperan`} a que el hu\xE9sped haga el check-in online o a que recepci\xF3n complete sus datos en Hostify: la factura sale sola la noche en que llegan.`:"",pend.no_vale?` ${pend.no_vale===1?"Una tiene":`${num(pend.no_vale)} tienen`} los datos, pero con un documento que no vale (por ejemplo, la letra del DNI o del NIE).`:""),__gh("div",{style:{color:B.muted,marginTop:4},"data-gufi-src":"facturas_huesped.tsx:437"},"Si recepci\xF3n tiene los datos del hu\xE9sped, pulsa \xABCompletar y facturar\xBB en su estancia: la factura sale al momento, con el importe de la reserva. Si el hu\xE9sped no vino y pag\xF3, pulsa \xABNo vino\xBB en su estancia: sale como factura simplificada, sin sus datos."))),__gh("div",{style:{maxHeight:abierta?"none":260,overflowY:"auto"},"data-gufi-src":"facturas_huesped.tsx:443"},lista.map(p=>__gh(import_react6.default.Fragment,{key:p.codigo},__gh("div",{style:{display:"flex",flexWrap:"wrap",gap:12,alignItems:"center",padding:"10px 18px",borderBottom:"1px solid #f0f0f2",fontSize:13},"data-gufi-src":"facturas_huesped.tsx:446"},__gh("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"data-gufi-src":"facturas_huesped.tsx:447"},p.huesped||p.codigo," ",__gh("span",{style:{color:B.faint},"data-gufi-src":"facturas_huesped.tsx:448"},"\xB7 ",fmtLarga(p.entrada)," \u2192 ",fmtLarga(p.salida)," \xB7 ",num(p.camas)," ",p.camas===1?"cama":"camas"," \xB7 ",p.canal)),p.sin_datos||p.no_vale||p.sale_esta_noche?__gh("span",{title:p.no_vale?`Falta ${p.no_vale}`:void 0,style:{display:"inline-flex",alignItems:"center",gap:6,color:B.muted,fontSize:12,whiteSpace:"nowrap",maxWidth:"45%",overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"facturas_huesped.tsx:452"},__gh("span",{style:{width:6,height:6,borderRadius:3,background:p.sale_esta_noche?B.green:p.no_vale?B.red:B.amber,flexShrink:0},"data-gufi-src":"facturas_huesped.tsx:454"}),p.sale_esta_noche?"sale esta noche":p.no_vale?`falta ${p.no_vale}`:"faltan datos del hu\xE9sped"):null,__gh("span",{className:"b-num",style:{color:B.ink},"data-gufi-src":"facturas_huesped.tsx:458"},money2(p.importe)),p.sale_esta_noche?null:__gh("button",{onClick:()=>abrir(p.codigo,"no_vino"),className:"p-pill b-press",style:{cursor:"pointer",color:B.accent,fontWeight:600,fontSize:12.5,display:"inline-flex",alignItems:"center",gap:6,whiteSpace:"nowrap"},"data-gufi-src":"facturas_huesped.tsx:461"},__gh(import_lucide_react6.UserX,{size:14}),abierta===p.codigo&&modo==="no_vino"?"Cerrar":"No vino"),__gh("button",{onClick:()=>abrir(p.codigo,"datos"),className:"b-press",style:{border:"none",background:"transparent",color:B.accent,fontWeight:600,fontSize:12.5,cursor:"pointer",padding:0,whiteSpace:"nowrap"},"data-gufi-src":"facturas_huesped.tsx:466"},abierta===p.codigo&&modo==="datos"?"Cerrar":"Completar y facturar")),abierta===p.codigo?modo==="no_vino"?__gh(NoVino,{api,token,p,onHecho:recargar,onCancelar:()=>abrir(p.codigo,"no_vino")}):__gh(CompletarHuesped,{api,token,p,onHecho:recargar}):null))))}function FacturasHuesped({api,token,periodo,ownerName,datos,recargar}){let movil=useIsMobile(900),[q,setQ]=(0,import_react6.useState)(""),[soloPeriodo,setSoloPeriodo]=(0,import_react6.useState)(!0),[aeat,setAeat]=(0,import_react6.useState)("todas"),[exportando,setExportando]=(0,import_react6.useState)(""),norm=s=>String(s||"").normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase(),vistas=(0,import_react6.useMemo)(()=>{let todas=datos&&datos.facturas||[],n=norm(q);return todas.filter(f=>soloPeriodo&&!(f.fecha>=periodo.desde&&f.fechaString(b.fecha).localeCompare(String(a.fecha))||b.numero-a.numero)},[datos,q,soloPeriodo,periodo]),porEstado=(0,import_react6.useMemo)(()=>contarAeat(vistas),[vistas]),facturas=(0,import_react6.useMemo)(()=>aeat==="todas"?vistas:vistas.filter(f=>aeatDe(f).grupo===aeat),[vistas,aeat]),aeatTodas=(0,import_react6.useMemo)(()=>contarAeat(datos&&datos.facturas||[]),[datos]),tot=(0,import_react6.useMemo)(()=>facturas.reduce((t,f)=>({base:t.base+(f.estado==="anulada"?0:f.base||0),iva:t.iva+(f.estado==="anulada"?0:f.iva||0),total:t.total+(f.estado==="anulada"?0:f.total||0),enviadas:t.enviadas+(aeatDe(f).grupo==="enviadas"?1:0)}),{base:0,iva:0,total:0,enviadas:0}),[facturas]),filtroAeat=FILTROS_AEAT.find(x=>x.k===aeat);async function exportar2(){setExportando("\u2026");try{await exportarTabla(`Facturas_a_huespedes_${limpioArchivo(soloPeriodo?periodoTexto(periodo.desde,periodo.hasta):"todas")}.xlsx`,"Facturas",`Tus facturas a hu\xE9spedes \xB7 ${ownerName||""}`,`${num(facturas.length)} facturas \xB7 base ${money2(tot.base)} \xB7 IVA ${money2(tot.iva)} \xB7 total ${money2(tot.total)}`,[{t:"N\xBA",w:14},{t:"Fecha",w:12,fecha:!0},{t:"Serie",w:8},{t:"Estado",w:11},{t:"Tipo",w:13},{t:"No vino",w:9},{t:"Destinatario",w:30},{t:"NIF",w:13},{t:"Entrada",w:12,fecha:!0},{t:"Salida",w:12,fecha:!0},{t:"Noches",w:8,n:!0},{t:"Hu\xE9spedes",w:10,n:!0},{t:"Base",w:12,eur:!0},{t:"IVA %",w:8,n:!0},{t:"IVA",w:11,eur:!0},{t:"Total",w:12,eur:!0},{t:"Reserva",w:18},{t:"Huella",w:16},{t:"Ante la AEAT",w:22},{t:"CSV AEAT",w:22}],facturas.map(f=>[f.numero_completo,f.fecha,f.serie,f.estado||"emitida",f.tipo||"",f.no_vino?"S\xED":"",f.destinatario_nombre||"",f.destinatario_nif||"",f.check_in,f.check_out,f.noches,f.huespedes,f.base,f.iva_pct,f.iva,f.total,f.confirmation_code||"",f.sellada?f.huella:"",aeatDe(f).t,f.remision_csv||""])),setExportando("")}catch(e){setExportando(String(e&&e.message||e))}}let pend=datos.pendientes,incidencias=(0,import_react6.useMemo)(()=>(datos&&datos.facturas||[]).map(f=>({f,motivo:incidenciaDe(f)})).filter(x=>x.motivo),[datos]),verFactura=numero=>{setQ(numero),setAeat("todas"),setSoloPeriodo(!1)};return __gh("div",{className:"p-grid","data-gufi-src":"facturas_huesped.tsx:539"},__gh(Automatico,{series:datos.series,verifactu:datos.verifactu,aeat:aeatTodas}),incidencias.length?__gh(Incidencias,{lista:incidencias,onVer:verFactura}):null,pend&&pend.estancias?__gh(Pendientes,{pend,arranque:datos.arranque,api,token,recargar}):null,__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"facturas_huesped.tsx:548"},__gh("div",{className:"p-stats","data-gufi-src":"facturas_huesped.tsx:549"},__gh(Cifra,{l:"Facturas",v:num(facturas.length),s:`${soloPeriodo?periodoTexto(periodo.desde,periodo.hasta):"todas"}${aeat!=="todas"?` \xB7 ${filtroAeat.t.toLowerCase()}`:""}`}),__gh(Cifra,{l:"Base imponible",v:money2(tot.base)}),__gh(Cifra,{l:"IVA",v:money2(tot.iva)}),__gh(Cifra,{l:"Total",v:money2(tot.total),s:`${num(tot.enviadas)} ${tot.enviadas===1?"enviada":"enviadas"} a la AEAT`}))),__gh("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:8},"data-gufi-src":"facturas_huesped.tsx:557"},__gh(FChip,{active:soloPeriodo,onClick:()=>setSoloPeriodo(!0)},periodoTexto(periodo.desde,periodo.hasta)),__gh(FChip,{active:!soloPeriodo,onClick:()=>setSoloPeriodo(!1)},"Todas (",num((datos.facturas||[]).length),")"),__gh("label",{className:"p-pill",style:{cursor:"text",minWidth:200,flex:movil?"1 1 100%":"0 1 240px"},"data-gufi-src":"facturas_huesped.tsx:560"},__gh(import_lucide_react6.Search,{size:15,style:{color:B.faint}}),__gh("input",{value:q,onChange:e=>setQ(e.target.value),placeholder:"N\xBA de factura, hu\xE9sped o reserva",style:{border:"none",outline:"none",background:"transparent",fontSize:13.5,flex:1,minWidth:0,color:B.ink},"data-gufi-src":"facturas_huesped.tsx:562"})),movil?null:__gh("span",{style:{width:1,height:22,background:B.hair,margin:"0 4px"},"data-gufi-src":"facturas_huesped.tsx:565"}),__gh("span",{style:{fontSize:12.5,color:B.muted},"data-gufi-src":"facturas_huesped.tsx:566"},"AEAT"),FILTROS_AEAT.filter(x=>x.k!=="otro"||porEstado.otro||aeat==="otro").map(x=>__gh(FChip,{key:x.k,active:aeat===x.k,color:x.c,onClick:()=>setAeat(x.k)},x.t,x.k==="todas"?"":` (${num(porEstado[x.k])})`)),__gh("button",{className:"p-btn",style:{marginLeft:"auto"},onClick:exportar2,disabled:exportando==="\u2026"||!facturas.length,"data-gufi-src":"facturas_huesped.tsx:572"},__gh(import_lucide_react6.Download,{size:15}),exportando==="\u2026"?"Preparando\u2026":"Excel")),exportando&&exportando!=="\u2026"?__gh("div",{className:"p-note",style:{color:B.red},"data-gufi-src":"facturas_huesped.tsx:576"},exportando):null,__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"facturas_huesped.tsx:578"},facturas.length?__gh("div",{style:{overflowX:"auto",maxHeight:640},"data-gufi-src":"facturas_huesped.tsx:580"},__gh("table",{className:"p-table",style:{minWidth:900},"data-gufi-src":"facturas_huesped.tsx:581"},__gh("thead",{"data-gufi-src":"facturas_huesped.tsx:582"},__gh("tr",{"data-gufi-src":"facturas_huesped.tsx:582"},__gh("th",{"data-gufi-src":"facturas_huesped.tsx:583"},"N\xBA"),__gh("th",{"data-gufi-src":"facturas_huesped.tsx:583"},"Fecha"),__gh("th",{"data-gufi-src":"facturas_huesped.tsx:583"},"Hu\xE9sped"),__gh("th",{"data-gufi-src":"facturas_huesped.tsx:583"},"Estancia"),__gh("th",{"data-r":"1","data-gufi-src":"facturas_huesped.tsx:584"},"Base"),__gh("th",{"data-r":"1","data-gufi-src":"facturas_huesped.tsx:584"},"IVA"),__gh("th",{"data-r":"1","data-gufi-src":"facturas_huesped.tsx:584"},"Total"),__gh("th",{"data-gufi-src":"facturas_huesped.tsx:584"},"VERI*FACTU"),__gh("th",{"data-gufi-src":"facturas_huesped.tsx:584"}))),__gh("tbody",{"data-gufi-src":"facturas_huesped.tsx:586"},facturas.slice(0,400).map(f=>__gh("tr",{key:f.id,"data-gufi-src":"facturas_huesped.tsx:588"},__gh("td",{style:{fontWeight:600},"data-gufi-src":"facturas_huesped.tsx:589"},f.numero_completo,f.estado==="anulada"?__gh("span",{className:"b-pill",style:{marginLeft:6,padding:"2px 7px",color:B.red,background:"rgba(220,38,38,.08)"},"data-gufi-src":"facturas_huesped.tsx:589"},"anulada"):null,f.no_vino?__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:5,marginLeft:8,fontSize:12,color:B.ink,whiteSpace:"nowrap"},"data-gufi-src":"facturas_huesped.tsx:592"},__gh(import_lucide_react6.UserX,{size:13,style:{color:B.amber}}),"No vino"):null),__gh("td",{"data-gufi-src":"facturas_huesped.tsx:597"},fmtLarga(f.fecha)),__gh("td",{style:{maxWidth:220,overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"facturas_huesped.tsx:598"},f.destinatario_nombre||f.nombres_huespedes||f.estancia_huesped||__gh("span",{style:{color:B.faint},"data-gufi-src":"facturas_huesped.tsx:598"},"\u2014")),__gh("td",{style:{color:B.muted,fontSize:12.5},"data-gufi-src":"facturas_huesped.tsx:599"},f.check_in?`${fmtLarga(f.check_in)} \u2192 ${fmtLarga(f.check_out)}`:f.concepto||"",f.noches?` \xB7 ${num(f.noches)} n`:""),__gh("td",{"data-r":"1","data-gufi-src":"facturas_huesped.tsx:600"},money2(f.base)),__gh("td",{"data-r":"1","data-gufi-src":"facturas_huesped.tsx:601"},money2(f.iva)),__gh("td",{"data-r":"1",style:{fontWeight:600},"data-gufi-src":"facturas_huesped.tsx:602"},money2(f.total)),__gh("td",{"data-gufi-src":"facturas_huesped.tsx:603"},__gh(Verifactu,{f})),__gh("td",{"data-r":"1","data-gufi-src":"facturas_huesped.tsx:604"},__gh(BotonPdf,{api,token,f})))))),facturas.length>400?__gh("div",{className:"p-note",style:{padding:14,justifyContent:"center"},"data-gufi-src":"facturas_huesped.tsx:609"},"Se ven las 400 primeras de ",num(facturas.length),". El Excel las lleva todas."):null):__gh(Vacio,{titulo:"Ninguna factura",texto:aeat!=="todas"?`Ninguna en \xAB${filtroAeat.t}\xBB con estos filtros. Prueba con otro estado ante la AEAT, con \xABTodas\xBB o con otro texto de b\xFAsqueda.`:"Prueba con \xABTodas\xBB o con otro texto de b\xFAsqueda."})))}var import_react7=require("react"),import_lucide_react7=require("lucide-react");var TRIM=["","1T","2T","3T","4T"],periodoDe=(fecha,modo)=>{if(modo==="mes")return fecha.slice(0,7);let q=Math.floor((Number(fecha.slice(5,7))-1)/3);return`${fecha.slice(0,4)}-T${q}`},etiquetaPeriodo=(k,modo)=>modo==="mes"?mesLabel(k):`${TRIM[Number(k.slice(6))+1]} ${k.slice(0,4)}`;function Libro({facData,ownerName,onVerPendientes,onVerCobros}){let movil=useIsMobile(),[modo,setModo]=(0,import_react7.useState)("mes"),[exportando,setExportando]=(0,import_react7.useState)(""),facturas=facData&&facData.facturas||[],pend=facData&&facData.pendientes,arranque=facData&&facData.arranque,periodos=(0,import_react7.useMemo)(()=>{let m={};return facturas.forEach(f=>{if(!f.fecha)return;let k=periodoDe(f.fecha,modo);m[k]||(m[k]={k,n:0,base:0,iva:0,total:0,anuladas:0,revision:0,rectificativas:0,series:new Set});let g=m[k];if(g.series.add(f.serie),f.estado==="anulada"){g.anuladas++;return}f.estado==="revision"&&g.revision++,(f.tipo==="rectificativa"||Number(f.total)<0)&&g.rectificativas++,g.n++,g.base+=Number(f.base)||0,g.iva+=Number(f.iva)||0,g.total+=Number(f.total)||0}),Object.values(m).map(g=>({...g,series:Array.from(g.series).sort().join(" \xB7 ")})).sort((a,b)=>b.k.localeCompare(a.k))},[facturas,modo]),tot=(0,import_react7.useMemo)(()=>periodos.reduce((a,g)=>({n:a.n+g.n,base:a.base+g.base,iva:a.iva+g.iva,total:a.total+g.total,anuladas:a.anuladas+g.anuladas,revision:a.revision+g.revision,rectificativas:a.rectificativas+g.rectificativas}),{n:0,base:0,iva:0,total:0,anuladas:0,revision:0,rectificativas:0}),[periodos]);async function exportar2(){setExportando("\u2026");try{let nombre=String(ownerName||"propietario").normalize("NFD").replace(/[^\w]+/g,"_").replace(/^_+|_+$/g,""),sub=`${ownerName||""} \xB7 ${modo==="mes"?"por meses":"por trimestres"}${arranque?` \xB7 actividad desde el ${fmtDate(arranque)}`:""}`;await exportarHojas(`Libro_facturas_${nombre}.xlsx`,[{hoja:"Resumen",titulo:"Libro de facturas emitidas",sub,columnas:[{t:"Periodo",w:18},{t:"Series",w:14},{t:"Facturas",w:10,n:!0},{t:"Base",w:14,eur:!0},{t:"IVA",w:13,eur:!0},{t:"Total",w:14,eur:!0},{t:"Rectificativas",w:14,n:!0},{t:"Anuladas",w:10,n:!0},{t:"En revisi\xF3n",w:12,n:!0}],filas:periodos.slice().reverse().map(g=>[etiquetaPeriodo(g.k,modo),g.series,g.n,g.base,g.iva,g.total,g.rectificativas,g.anuladas,g.revision]).concat([["TOTAL","",tot.n,tot.base,tot.iva,tot.total,tot.rectificativas,tot.anuladas,tot.revision]])},{hoja:"Facturas",titulo:"Detalle factura a factura",sub,columnas:[{t:"N\xBA",w:14},{t:"Fecha",w:12,fecha:!0},{t:"Serie",w:8},{t:"Estado",w:11},{t:"Tipo",w:13},{t:"Destinatario",w:30},{t:"NIF",w:13},{t:"Entrada",w:12,fecha:!0},{t:"Salida",w:12,fecha:!0},{t:"Noches",w:8,n:!0},{t:"Base",w:12,eur:!0},{t:"IVA",w:11,eur:!0},{t:"Total",w:12,eur:!0},{t:"Reserva",w:18}],filas:facturas.slice().sort((x,y)=>String(x.fecha).localeCompare(String(y.fecha))||x.numero-y.numero).map(f=>[f.numero_completo,f.fecha,f.serie,f.estado||"emitida",f.tipo||"",f.destinatario_nombre||"",f.destinatario_nif||"",f.check_in,f.check_out,f.noches,f.base,f.iva,f.total,f.confirmation_code||""])}]),setExportando("")}catch(e){setExportando(String(e&&e.message||e))}}return facturas.length?__gh("div",{className:"b-fade","data-gufi-src":"libro.tsx:89"},pend&&pend.estancias?__gh("div",{className:"rounded-2xl px-4 py-3.5 mb-5 flex items-start gap-3",style:{background:`${B.amber}0f`,border:`1px solid ${B.amber}44`},"data-gufi-src":"libro.tsx:91"},__gh(import_lucide_react7.AlertTriangle,{size:17,style:{color:B.amber,flexShrink:0,marginTop:1}}),__gh("div",{className:"text-[12.5px] flex-1",style:{color:B.sub,lineHeight:1.55},"data-gufi-src":"libro.tsx:93"},__gh("b",{style:{color:B.ink},"data-gufi-src":"libro.tsx:94"},"Quedan ",num(pend.estancias)," estancias sin factura")," desde el inicio de la actividad",arranque?` (${fmtDate(arranque)})`:"",", por ",__gh("b",{style:{color:B.ink},"data-gufi-src":"libro.tsx:95"},money2(pend.importe)),". La m\xE1s antigua entr\xF3 el ",fmtDate(pend.mas_antigua),". Se cuentan por estancia, no por cama: una reserva de varias camas lleva una sola factura.",onVerPendientes?__gh(__gf,null," ",__gh("button",{onClick:onVerPendientes,className:"font-semibold",style:{color:B.accent,background:"transparent",border:"none",cursor:"pointer",padding:0},"data-gufi-src":"libro.tsx:99"},"Ver cu\xE1les son \u2192")):null)):__gh("div",{className:"rounded-2xl px-4 py-3.5 mb-5 flex items-start gap-3",style:{background:`${B.green}0d`,border:`1px solid ${B.green}44`},"data-gufi-src":"libro.tsx:104"},__gh(import_lucide_react7.CheckCircle2,{size:17,style:{color:B.green,flexShrink:0,marginTop:1}}),__gh("div",{className:"text-[12.5px]",style:{color:B.sub,lineHeight:1.55},"data-gufi-src":"libro.tsx:106"},__gh("b",{style:{color:B.ink},"data-gufi-src":"libro.tsx:107"},"No queda nada por facturar")," desde el inicio de la actividad",arranque?` (${fmtDate(arranque)})`:"",". Todas las estancias que entraron antes de hoy tienen su factura.")),pend&&pend.hoy?__gh("div",{className:"text-[12.5px] mb-5",style:{color:B.muted,lineHeight:1.55,marginTop:-8},"data-gufi-src":"libro.tsx:114"},"Las ",num(pend.hoy)," estancias que entran hoy (",money2(pend.hoy_importe),") se facturan solas esta noche."):null,onVerCobros?__gh("div",{className:"text-[12.5px] mb-6",style:{color:B.muted},"data-gufi-src":"libro.tsx:119"},"D\xF3nde est\xE1 el dinero de lo facturado \u2014canal, TPV, otros medios y lo pendiente\u2014 est\xE1 en"," ",__gh("button",{onClick:onVerCobros,className:"font-semibold",style:{color:B.accent,background:"transparent",border:"none",cursor:"pointer",padding:0},"data-gufi-src":"libro.tsx:121"},"Cobros \u2192")):null,__gh(Bloque,{titulo:"Libro de facturas emitidas",sub:"lo que se le pasa al asesor",icono:import_lucide_react7.FileText}),__gh("div",{className:"flex flex-wrap items-center gap-2.5 mb-4","data-gufi-src":"libro.tsx:126"},__gh("div",{className:"b-seg","data-gufi-src":"libro.tsx:127"},[["mes","Por meses"],["trim","Por trimestres"]].map(([k,l])=>__gh("button",{key:k,"data-on":modo===k?"1":"0",onClick:()=>setModo(k),"data-gufi-src":"libro.tsx:129"},l))),__gh("span",{style:{flex:1},"data-gufi-src":"libro.tsx:132"}),__gh("button",{onClick:exportar2,disabled:exportando==="\u2026",className:"b-press flex items-center gap-1.5 rounded-lg px-3.5 py-2.5 text-[13px] font-semibold",style:{background:"#fff",border:`1px solid ${B.hair}`,color:B.muted,cursor:"pointer"},"data-gufi-src":"libro.tsx:133"},__gh(import_lucide_react7.Download,{size:15})," ",exportando==="\u2026"?"Preparando\u2026":"Bajar el libro en Excel")),__gh("div",{className:"b-card overflow-hidden","data-gufi-src":"libro.tsx:139"},movil?__gh("div",{className:"p-4","data-gufi-src":"libro.tsx:141"},periodos.map(g=>__gh("div",{key:g.k,className:"b-row","data-gufi-src":"libro.tsx:143"},__gh("div",{className:"flex items-baseline justify-between gap-3 mb-2","data-gufi-src":"libro.tsx:144"},__gh("span",{className:"text-[14px] font-semibold",style:{color:B.ink},"data-gufi-src":"libro.tsx:145"},etiquetaPeriodo(g.k,modo)),__gh("span",{className:"text-[15px] font-semibold b-num",style:{color:B.accent},"data-gufi-src":"libro.tsx:146"},money2(g.total))),__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:148"},__gh("span",{"data-gufi-src":"libro.tsx:148"},"Facturas"),__gh("span",{"data-gufi-src":"libro.tsx:148"},num(g.n))),__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:149"},__gh("span",{"data-gufi-src":"libro.tsx:149"},"Base"),__gh("span",{"data-gufi-src":"libro.tsx:149"},money2(g.base))),__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:150"},__gh("span",{"data-gufi-src":"libro.tsx:150"},"IVA"),__gh("span",{"data-gufi-src":"libro.tsx:150"},money2(g.iva))),__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:151"},__gh("span",{"data-gufi-src":"libro.tsx:151"},"Series"),__gh("span",{"data-gufi-src":"libro.tsx:151"},g.series)),__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:152"},__gh("span",{"data-gufi-src":"libro.tsx:152"},"Rectificativas"),__gh("span",{"data-gufi-src":"libro.tsx:152"},num(g.rectificativas))),g.anuladas?__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:153"},__gh("span",{"data-gufi-src":"libro.tsx:153"},"Anuladas"),__gh("span",{style:{color:B.red},"data-gufi-src":"libro.tsx:153"},num(g.anuladas))):null,g.revision?__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:154"},__gh("span",{"data-gufi-src":"libro.tsx:154"},"En revisi\xF3n"),__gh("span",{style:{color:B.amber},"data-gufi-src":"libro.tsx:154"},num(g.revision))):null)),__gh("div",{className:"b-row",style:{background:B.accentSoft},"data-gufi-src":"libro.tsx:157"},__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:158"},__gh("span",{"data-gufi-src":"libro.tsx:158"},"Total facturas"),__gh("span",{"data-gufi-src":"libro.tsx:158"},num(tot.n))),__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:159"},__gh("span",{"data-gufi-src":"libro.tsx:159"},"Base"),__gh("span",{"data-gufi-src":"libro.tsx:159"},money2(tot.base))),__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:160"},__gh("span",{"data-gufi-src":"libro.tsx:160"},"IVA"),__gh("span",{"data-gufi-src":"libro.tsx:160"},money2(tot.iva))),__gh("div",{className:"b-kv","data-gufi-src":"libro.tsx:161"},__gh("span",{"data-gufi-src":"libro.tsx:161"},"Total"),__gh("span",{style:{color:B.accent},"data-gufi-src":"libro.tsx:161"},money2(tot.total))))):__gh(TableWrap,{min:900},__gh("thead",{"data-gufi-src":"libro.tsx:166"},__gh("tr",{"data-gufi-src":"libro.tsx:166"},__gh(Th,null,"Periodo"),__gh(Th,null,"Series"),__gh(Th,{r:!0},"Facturas"),__gh(Th,{r:!0},"Base"),__gh(Th,{r:!0},"IVA"),__gh(Th,{r:!0},"Total"),__gh(Th,{r:!0},"Rectificativas"),__gh(Th,{r:!0},"Anuladas"),__gh(Th,{r:!0},"En revisi\xF3n"))),__gh("tbody",{"data-gufi-src":"libro.tsx:167"},periodos.map(g=>__gh("tr",{key:g.k,"data-gufi-src":"libro.tsx:169"},__gh(Td,{b:!0},etiquetaPeriodo(g.k,modo)),__gh(Td,null,__gh("span",{style:{color:B.faint},"data-gufi-src":"libro.tsx:171"},g.series)),__gh(Td,{r:!0},num(g.n)),__gh(Td,{r:!0},money2(g.base)),__gh(Td,{r:!0},money2(g.iva)),__gh(Td,{r:!0,b:!0},money2(g.total)),__gh(Td,{r:!0},g.rectificativas?num(g.rectificativas):__gh("span",{style:{color:B.faint},"data-gufi-src":"libro.tsx:176"},"0")),__gh(Td,{r:!0},g.anuladas?__gh("span",{style:{color:B.red},"data-gufi-src":"libro.tsx:177"},num(g.anuladas)):__gh("span",{style:{color:B.faint},"data-gufi-src":"libro.tsx:177"},"\u2014")),__gh(Td,{r:!0},g.revision?__gh("span",{style:{color:B.amber},"data-gufi-src":"libro.tsx:178"},num(g.revision)):__gh("span",{style:{color:B.faint},"data-gufi-src":"libro.tsx:178"},"\u2014")))),__gh("tr",{"data-gufi-src":"libro.tsx:181"},__gh(Td,{b:!0},"Total"),__gh(Td,null),__gh(Td,{r:!0,b:!0},num(tot.n)),__gh(Td,{r:!0,b:!0},money2(tot.base)),__gh(Td,{r:!0,b:!0},money2(tot.iva)),__gh(Td,{r:!0,b:!0},__gh("span",{style:{color:B.accent},"data-gufi-src":"libro.tsx:186"},money2(tot.total))),__gh(Td,{r:!0,b:!0},num(tot.rectificativas)),__gh(Td,{r:!0,b:!0},tot.anuladas?num(tot.anuladas):"\u2014"),__gh(Td,{r:!0,b:!0},tot.revision?num(tot.revision):"\u2014"))))),__gh("div",{className:"text-[12.5px] mt-3",style:{color:B.muted,lineHeight:1.6},"data-gufi-src":"libro.tsx:195"},exportando&&exportando!=="\u2026"?__gh("div",{style:{color:B.red},"data-gufi-src":"libro.tsx:196"},exportando):null,"El Excel lleva dos hojas: el resumen por periodo (con rectificativas, anuladas y en revisi\xF3n) y el detalle factura a factura con su n\xFAmero, fecha, serie, destinatario, NIF, base, IVA, total y la reserva de la que sale.",tot.anuladas?" Las anuladas se listan pero no suman a las bases: el n\xFAmero est\xE1 gastado, el importe no es ingreso.":"")):__gh("div",{className:"b-card","data-gufi-src":"libro.tsx:86"},__gh(Empty,{text:"Todav\xEDa no hay facturas emitidas."}))}function BotonPdf2({api,token,f,detalle}){let[estado,setEstado]=(0,import_react8.useState)("");async function bajar(ev){ev.stopPropagation(),setEstado("\u2026");try{let r=await api("portal_factura_odoo_pdf",{token,facturaId:f.id,detalle:!!detalle});descargarPdfBase64(r.pdf,r.filename),setEstado("")}catch(e){setEstado(String(e&&e.message||e))}}let hay=detalle?f.detalle:f.pdf;return __gh("span",{style:{display:"inline-flex",flexDirection:"column",alignItems:"flex-end"},"data-gufi-src":"facturas.tsx:30"},__gh("button",{className:"p-btn p-btn-s",disabled:!hay||estado==="\u2026",onClick:bajar,title:hay?"":detalle?"Esta factura no lleva detalle de reservas":"Odoo a\xFAn no ha generado el PDF","data-gufi-src":"facturas.tsx:31"},estado==="\u2026"?__gh(import_lucide_react8.Loader2,{size:13,className:"animate-spin"}):__gh(import_lucide_react8.FileText,{size:13}),detalle?"Detalle":"Factura"),estado&&estado!=="\u2026"?__gh("span",{style:{fontSize:11.5,color:B.red,maxWidth:220,textAlign:"right",marginTop:3,whiteSpace:"normal"},"data-gufi-src":"facturas.tsx:34"},estado):null)}var pestanas=()=>[["empresa",`De ${marca().nombre}`],["mias","A tus hu\xE9spedes"],["libro","Libro e IVA"]],Pestanas=({valor,elegir})=>__gh("div",{className:"p-seg",style:{alignSelf:"flex-start"},"data-gufi-src":"facturas.tsx:42"},pestanas().map(([k,l])=>__gh("button",{key:k,"data-on":valor===k?"1":"0",onClick:()=>elegir(k),"data-gufi-src":"facturas.tsx:43"},l)));function Match({api,token,inicio,titular,periodo,nombreTitular}){let candidatos=titular?inicio.titulares.filter(t=>String(t.id)===String(titular)):inicio.titulares,[elegido,setElegido]=(0,import_react8.useState)(candidatos.length===1?String(candidatos[0].id):""),[abierto,setAbierto]=(0,import_react8.useState)(!1),[estado,setEstado]=(0,import_react8.useState)({ocupado:!1,error:"",hecho:""}),quien2=candidatos.length===1?String(candidatos[0].id):elegido,etiqueta=periodoTexto(periodo.desde,periodo.hasta);async function bajar(){setEstado({ocupado:!0,error:"",hecho:""});try{let d2=await api("portal_match",{token,titular:Number(quien2)}),r=await exportarMatch(d2,periodo.desde,periodo.hasta,etiqueta);setEstado({ocupado:!1,error:"",hecho:`${num(r.reservas)} reservas, ${num(r.cobradas)} ya cobradas \xB7 ${money2(r.total)} en banco`})}catch(e){setEstado({ocupado:!1,error:String(e&&e.message||e),hecho:""})}}return __gh("div",{className:"p-card",style:{padding:20,display:"flex",gap:18,alignItems:"center",flexWrap:"wrap"},"data-gufi-src":"facturas.tsx:63"},__gh("div",{style:{width:44,height:44,borderRadius:13,background:"rgba(21,128,61,.09)",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},"data-gufi-src":"facturas.tsx:64"},__gh(import_lucide_react8.FileSpreadsheet,{size:21,style:{color:B.green}})),__gh("div",{style:{flex:"1 1 260px",minWidth:0},"data-gufi-src":"facturas.tsx:65"},__gh("div",{style:{fontSize:15.5,fontWeight:600,color:B.ink,letterSpacing:"-.2px"},"data-gufi-src":"facturas.tsx:66"},"MATCH de ",etiqueta.toLowerCase().startsWith("a\xF1o")?etiqueta.toLowerCase():etiqueta),__gh("div",{style:{fontSize:13,color:B.muted,marginTop:3,lineHeight:1.45},"data-gufi-src":"facturas.tsx:67"},"Cada reserva junto al pago que entr\xF3 en el banco, en Excel. Es el mismo fichero que prepara ",marca().nombre,"."),estado.hecho?__gh("div",{style:{fontSize:12.5,color:B.green,marginTop:6},"data-gufi-src":"facturas.tsx:68"},"Descargado \xB7 ",estado.hecho):null,estado.error?__gh("div",{style:{fontSize:12.5,color:B.red,marginTop:6},"data-gufi-src":"facturas.tsx:69"},estado.error):null),__gh("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},"data-gufi-src":"facturas.tsx:71"},candidatos.length>1?__gh(Desplegable,{abierto,setAbierto,derecha:!0,boton:__gh(Pildora,{etiqueta:"De",valor:elegido?nombreTitular[elegido]:"Elige titular",activa:abierto||!!elegido,onClick:()=>setAbierto(!abierto)})},__gh(ListaBuscable,{opciones:candidatos.map(t=>({v:String(t.id),t:t.nombre,g:t.empresa?"Empresas":"Personas"})).sort((a,b)=>a.g.localeCompare(b.g)),valor:elegido,placeholder:"Buscar titular",onElegir:v=>{setElegido(v),setAbierto(!1)}})):null,__gh("button",{className:"p-btn p-btn-a",disabled:!quien2||estado.ocupado,onClick:bajar,"data-gufi-src":"facturas.tsx:78"},estado.ocupado?__gh(__gf,null,__gh(import_lucide_react8.Loader2,{size:15,className:"animate-spin"}),"Preparando"):__gh(__gf,null,__gh(import_lucide_react8.Download,{size:15}),"Descargar MATCH"))))}function Facturas({api,token,inicio,filtros,titular,periodo,propPorId,nombreTitular,facturaAbierta,abrirFactura,volver}){let propias=!!inicio.cuenta.factura_clientes,[pestana,setPestana]=(0,import_react8.useState)("empresa"),[version,setVersion]=(0,import_react8.useState)(0),mias=useScript(api,"portal_facturas",{token,version},propias),hastaConMargen=primeroMesSiguiente(primeroMesSiguiente(periodo.hasta.slice(0,7)).slice(0,7)),f=useScript(api,"portal_facturas_odoo",{token,...filtros,desde:periodo.desde,hasta:hastaConMargen},!0),[exportando,setExportando]=(0,import_react8.useState)(!1),facturas=(0,import_react8.useMemo)(()=>f.datos?f.datos.facturas.filter(x=>{let k=x.periodo?x.periodo.desde:x.fecha;return k>=periodo.desde&&kfacturas.reduce((t,x)=>({base:t.base+x.base,iva:t.iva+x.iva,total:t.total+x.total}),{base:0,iva:0,total:0}),[facturas]),grupos=(0,import_react8.useMemo)(()=>{let m={};return facturas.forEach(x=>{let k=(x.periodo?x.periodo.desde:x.fecha).slice(0,7);(m[k]=m[k]||[]).push(x)}),Object.keys(m).sort().reverse().map(k=>({mes:k,facturas:m[k]}))},[facturas]),varios=inicio.titulares.length>1,[errorExport,setErrorExport]=(0,import_react8.useState)("");async function exportar2(){setExportando(!0),setErrorExport("");try{await exportarTabla(`Facturas_${limpioArchivo(periodoTexto(periodo.desde,periodo.hasta))}.xlsx`,"Facturas",`Facturas de ${marca().nombre} \xB7 ${periodoTexto(periodo.desde,periodo.hasta)}`,`${num(facturas.length)} facturas`,[{t:"N\xBA factura",w:22},{t:"Fecha",w:12,fecha:!0},{t:"Tipo",w:13},{t:"Periodo liquidado",w:18},{t:"Propiedades",w:40},{t:"Titular",w:30},{t:"Emitida por",w:28},{t:"Base imponible",w:15,eur:!0},{t:"IVA",w:12,eur:!0},{t:"Total",w:14,eur:!0}],facturas.map(x=>[x.numero,x.fecha,x.rectificativa?"Rectificativa":"Factura",x.periodo?mesLabel(x.periodo.desde.slice(0,7)):"",x.propiedades.map(p=>(propPorId[p]||{}).nombre).filter(Boolean).join(" \xB7 ")||x.concepto||"",x.titular?nombreTitular[x.titular.id]||x.titular.nombre:"",x.emisor||"",x.base,x.iva,x.total]))}catch(e){setErrorExport(String(e&&e.message||e))}setExportando(!1)}if(propias&&pestana!=="empresa")return __gh("div",{className:"p-grid","data-gufi-src":"facturas.tsx:124"},__gh(Pestanas,{valor:pestana,elegir:setPestana}),mias.error?__gh("div",{className:"p-card","data-gufi-src":"facturas.tsx:126"},__gh(Vacio,{titulo:"No se han podido leer tus facturas",texto:mias.error})):mias.cargando||!mias.datos?__gh("div",{className:"p-card",style:{padding:70,display:"flex",justifyContent:"center"},"data-gufi-src":"facturas.tsx:127"},__gh(import_lucide_react8.Loader2,{className:"animate-spin",style:{color:B.accent}})):pestana==="mias"?__gh(FacturasHuesped,{api,token,periodo,ownerName:inicio.cuenta.nombre,datos:mias.datos,recargar:()=>setVersion(v=>v+1)}):__gh(Libro,{facData:mias.datos,ownerName:inicio.cuenta.nombre,onVerPendientes:()=>setPestana("mias")}));if(facturaAbierta){if(f.error)return __gh("div",{className:"p-grid","data-gufi-src":"facturas.tsx:140"},__gh("div",{className:"p-card","data-gufi-src":"facturas.tsx:140"},__gh(Vacio,{titulo:"No se han podido cargar las facturas",texto:f.error})));if(f.cargando||!f.datos)return __gh("div",{className:"p-grid","data-gufi-src":"facturas.tsx:141"},__gh("div",{className:"p-card",style:{padding:70,display:"flex",justifyContent:"center"},"data-gufi-src":"facturas.tsx:141"},__gh(import_lucide_react8.Loader2,{className:"animate-spin",style:{color:B.accent}})));let abierta=facturas.find(x=>String(x.id)===String(facturaAbierta));return abierta?__gh("div",{className:"p-grid","data-gufi-src":"facturas.tsx:155"},__gh(Desglose,{api,token,factura:abierta,nombrePiso:l=>(propPorId[l.apartamento]||{}).nombre||l.piso,onVolver:volver})):__gh("div",{className:"p-grid","data-gufi-src":"facturas.tsx:145"},__gh(Pagina,{titulo:"Esa factura no es de este periodo",onVolver:volver},__gh("div",{className:"p-note",style:{padding:"10px 0"},"data-gufi-src":"facturas.tsx:147"},"No aparece entre las de ",periodoTexto(periodo.desde,periodo.hasta).toLowerCase(),". Vuelve, cambia el periodo de arriba y \xE1brela otra vez.")))}return __gh("div",{className:"p-grid","data-gufi-src":"facturas.tsx:162"},propias?__gh(Pestanas,{valor:pestana,elegir:setPestana}):null,__gh(Match,{api,token,inicio,titular,periodo,nombreTitular}),f.error?__gh("div",{className:"p-card","data-gufi-src":"facturas.tsx:165"},__gh(Vacio,{titulo:"No se han podido cargar las facturas",texto:f.error})):f.cargando?__gh("div",{className:"p-card",style:{padding:70,display:"flex",justifyContent:"center"},"data-gufi-src":"facturas.tsx:166"},__gh(import_lucide_react8.Loader2,{className:"animate-spin",style:{color:B.accent}})):facturas.length?__gh(__gf,null,__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"facturas.tsx:170"},__gh("div",{className:"p-stats","data-gufi-src":"facturas.tsx:171"},__gh(Cifra,{l:"Facturas",v:num(facturas.length),s:periodoTexto(periodo.desde,periodo.hasta)}),__gh(Cifra,{l:"Base imponible",v:money2(tot.base)}),__gh(Cifra,{l:"IVA",v:money2(tot.iva)}),__gh(Cifra,{l:"Total",v:money2(tot.total)}))),__gh("div",{style:{display:"flex",justifyContent:"flex-end",marginTop:-4},"data-gufi-src":"facturas.tsx:178"},__gh("button",{className:"p-btn",onClick:exportar2,disabled:exportando,"data-gufi-src":"facturas.tsx:179"},__gh(import_lucide_react8.Download,{size:15}),exportando?"Preparando\u2026":"Lista en Excel")),errorExport?__gh("div",{className:"p-note",style:{color:B.red,justifyContent:"flex-end"},"data-gufi-src":"facturas.tsx:181"},errorExport):null,grupos.map(g=>__gh("div",{key:g.mes,className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"facturas.tsx:183"},__gh("div",{style:{padding:"14px 20px",borderBottom:`1px solid ${B.hair}`,display:"flex",alignItems:"baseline",gap:10},"data-gufi-src":"facturas.tsx:184"},__gh("span",{style:{fontSize:15,fontWeight:600,color:B.ink,letterSpacing:"-.2px"},"data-gufi-src":"facturas.tsx:185"},mesLabel(g.mes)),__gh("span",{className:"p-note","data-gufi-src":"facturas.tsx:186"},num(g.facturas.length)," factura",g.facturas.length===1?"":"s"),__gh("span",{className:"b-num",style:{marginLeft:"auto",fontSize:14,fontWeight:600},"data-gufi-src":"facturas.tsx:187"},money2(g.facturas.reduce((s,x)=>s+x.total,0)))),g.facturas.map(x=>{let props=x.propiedades.map(p=>(propPorId[p]||{}).nombre).filter(Boolean);return __gh("div",{key:x.id,style:{display:"flex",alignItems:"center",gap:14,padding:"13px 20px",borderBottom:"1px solid #f0f0f2",flexWrap:"wrap"},"data-gufi-src":"facturas.tsx:192"},__gh("div",{style:{flex:"1 1 300px",minWidth:0},"data-gufi-src":"facturas.tsx:193"},__gh("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},"data-gufi-src":"facturas.tsx:194"},__gh("span",{className:"b-num",style:{fontSize:14,fontWeight:600,color:B.ink,letterSpacing:"-.1px"},"data-gufi-src":"facturas.tsx:195"},x.numero),x.rectificativa?__gh("span",{className:"b-pill",style:{color:B.amber,background:"rgba(180,83,9,.08)",padding:"3px 8px"},"data-gufi-src":"facturas.tsx:196"},"Rectificativa"):null),__gh("div",{style:{fontSize:12.5,color:B.muted,marginTop:3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"data-gufi-src":"facturas.tsx:198"},x.periodo?`Liquidaci\xF3n de ${mesLabel(x.periodo.desde.slice(0,7)).toLowerCase()}`:x.concepto||"Factura",props.length?` \xB7 ${props.join(", ")}`:"",x.estancias?` \xB7 ${num(x.estancias)} estancias`:"",varios&&x.titular?` \xB7 ${nombreTitular[x.titular.id]||x.titular.nombre}`:"")),__gh("div",{style:{fontSize:12.5,color:B.muted,width:92},"data-gufi-src":"facturas.tsx:205"},fmtLarga(x.fecha)),__gh("div",{style:{textAlign:"right",width:130},"data-gufi-src":"facturas.tsx:206"},__gh("div",{className:"b-num",style:{fontSize:14.5,fontWeight:600,color:B.ink},"data-gufi-src":"facturas.tsx:207"},money2(x.total)),__gh("div",{className:"b-num",style:{fontSize:11.5,color:B.faint},"data-gufi-src":"facturas.tsx:208"},"base ",money2(x.base))),__gh("div",{style:{display:"flex",gap:6,alignItems:"flex-start"},"data-gufi-src":"facturas.tsx:210"},x.periodo?__gh("button",{className:"p-btn p-btn-s",onClick:()=>abrirFactura(x.id),"data-gufi-src":"facturas.tsx:211"},__gh(import_lucide_react8.ListTree,{size:13}),"Desglose"):null,__gh(BotonPdf2,{api,token,f:x}),x.detalle?__gh(BotonPdf2,{api,token,f:x,detalle:!0}):null))})))):__gh("div",{className:"p-card","data-gufi-src":"facturas.tsx:167"},__gh(Vacio,{titulo:`Sin facturas de ${periodoTexto(periodo.desde,periodo.hasta).toLowerCase()}`,texto:`${marca().nombre} factura a mes vencido: la liquidaci\xF3n de un mes aparece a principios del siguiente.`})))}var import_react9=require("react"),import_lucide_react9=require("lucide-react");function Barras({filas,total,color,vacio}){let max=Math.max(1,...filas.map(f=>f.n));return!filas.length||!total?__gh("div",{className:"p-note",style:{padding:"6px 0"},"data-gufi-src":"huespedes.tsx:14"},vacio):__gh("div",{"data-gufi-src":"huespedes.tsx:16"},filas.map(f=>__gh("div",{key:f.t,style:{display:"grid",gridTemplateColumns:"minmax(0,150px) minmax(0,1fr) 92px",alignItems:"center",gap:12,padding:"7px 0"},"data-gufi-src":"huespedes.tsx:18"},__gh("span",{style:{fontSize:13.5,color:B.ink,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"data-gufi-src":"huespedes.tsx:19"},f.t),__gh("div",{style:{height:8,borderRadius:999,background:"#f0f0f2",overflow:"hidden"},"data-gufi-src":"huespedes.tsx:20"},__gh("div",{style:{width:`${f.n/max*100}%`,height:"100%",borderRadius:999,background:f.color||color},"data-gufi-src":"huespedes.tsx:21"})),__gh("span",{className:"b-num",style:{fontSize:12.5,color:B.muted,textAlign:"right"},"data-gufi-src":"huespedes.tsx:23"},num(f.n)," \xB7 ",pct(f.n/total*100)))))}function porReserva(estancias){let m={};return estancias.forEach(e=>{let k=e.nro||`id${e.id}`,r=m[k]||(m[k]={k,huesped:e.huesped,entrada:e.entrada,salida:e.salida,noches:0,importe:0});e.entradar.salida&&(r.salida=e.salida),r.noches=Math.max(r.noches,e.noches),r.importe+=e.facturado}),Object.values(m)}function prorrogas(reservas){let norm=s=>String(s||"").normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().replace(/\s+/g," ").trim(),orden=reservas.filter(r=>norm(r.huesped)).sort((a,b)=>norm(a.huesped).localeCompare(norm(b.huesped))||a.entrada.localeCompare(b.entrada)),siguen=new Set,empiezan=new Set,noches=0;for(let i=1;i__gh("div",{className:"p-card",style:{minWidth:0},"data-gufi-src":"huespedes.tsx:66"},__gh("div",{className:"p-card-h","data-gufi-src":"huespedes.tsx:67"},__gh("div",{"data-gufi-src":"huespedes.tsx:67"},__gh("h3",{"data-gufi-src":"huespedes.tsx:67"},titulo),sub?__gh("p",{"data-gufi-src":"huespedes.tsx:67"},sub):null)),__gh("div",{style:{padding:"12px 20px 18px"},"data-gufi-src":"huespedes.tsx:68"},children));function Lista2({d:d2,periodo,propPorId,abrirEstancia}){let movil=useIsMobile(900),[q,setQ]=(0,import_react9.useState)(""),[exportando,setExportando]=(0,import_react9.useState)(!1),[errorExport,setErrorExport]=(0,import_react9.useState)(""),{orden,th,flecha}=useOrden({k:"entrada",asc:!1}),h=d2.huespedes,reales=(0,import_react9.useMemo)(()=>d2.estancias.filter(e=>!e.ajuste&&!e.solo_limpieza),[d2]),reservas=(0,import_react9.useMemo)(()=>porReserva(reales),[reales]),pr=(0,import_react9.useMemo)(()=>prorrogas(reservas),[reservas]),gastoMedio=reservas.length?reservas.reduce((s,r)=>s+r.importe,0)/reservas.length:null,norm=s=>String(s||"").normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase(),filas=(0,import_react9.useMemo)(()=>{let n=norm(q),vis=n?reales.filter(e=>norm(`${e.huesped} ${paisEs(e.pais)} ${e.nro}`).includes(n)):reales;return ordenar(vis,orden,{huesped:e=>e.huesped,pais:e=>e.pais?paisEs(e.pais):null,personas:e=>e.personas,entrada:e=>e.entrada,noches:e=>e.noches,antelacion:e=>e.antelacion,canal:e=>e.canal})},[reales,q,orden]),TOP=8,paises=h.paises.slice(0,TOP).map(p=>({t:paisEs(p.pais),n:p.n})),otros=h.paises.slice(TOP).reduce((s,p)=>s+p.n,0);otros&&paises.push({t:"Otros pa\xEDses",n:otros});let conPais=h.estancias-h.sin_pais,conEdad=h.edades.reduce((s,e)=>s+e.n,0),canales=d2.canales.map(c=>({t:c.canal,n:c.estancias,color:canalColor(c.canal)}));async function exportar2(){setExportando(!0),setErrorExport("");try{await exportarEstancias(filas,propPorId,periodo,"Hu\xE9spedes")}catch(e){setErrorExport(String(e&&e.message||e))}setExportando(!1)}return __gh("div",{className:"p-grid","data-gufi-src":"huespedes.tsx:106"},__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"huespedes.tsx:107"},__gh("div",{className:"p-stats","data-gufi-src":"huespedes.tsx:108"},__gh(Cifra,{l:"Estancias",v:num(h.estancias),s:periodoTexto(periodo.desde,periodo.hasta)}),__gh(Cifra,{l:"Hu\xE9spedes",v:num(h.personas),s:h.grupo_medio?`${String(h.grupo_medio).replace(".",",")} por reserva de media`:"sin dato de personas"}),__gh(Cifra,{l:"Estancia media",v:d2.totales.estancia_media==null?"\u2014":`${String(d2.totales.estancia_media).replace(".",",")} noches`}),__gh(Cifra,{l:"Antelaci\xF3n media",v:h.antelacion_media==null?"\u2014":`${num(h.antelacion_media)} d\xEDas`,s:"entre la reserva y la llegada"}))),__gh("div",{className:"p-grid p-g-2","data-gufi-src":"huespedes.tsx:116"},__gh(Tarjeta,{titulo:"De d\xF3nde vienen",sub:`Sobre ${num(conPais)} de ${num(h.estancias)} estancias con pa\xEDs conocido`},__gh(Barras,{filas:paises,total:conPais,color:B.accent,vacio:"Ninguna estancia trae el pa\xEDs del hu\xE9sped."})),__gh(Tarjeta,{titulo:"Edad",sub:h.viajeros?`${num(conEdad)} viajeros del registro, en ${num(h.con_registro)} de ${num(h.estancias)} estancias`:"Sale del registro de viajeros"},__gh(Barras,{filas:h.edades.map(e=>({t:e.tramo,n:e.n})),total:conEdad,color:B.gold,vacio:"Ning\xFAn viajero registrado con fecha de nacimiento en este periodo."}),h.sexo.mujeres+h.sexo.hombres?__gh("div",{style:{marginTop:14},"data-gufi-src":"huespedes.tsx:123"},__gh("div",{style:{display:"flex",height:8,borderRadius:999,overflow:"hidden"},"data-gufi-src":"huespedes.tsx:124"},__gh("div",{style:{width:`${h.sexo.mujeres/(h.sexo.mujeres+h.sexo.hombres)*100}%`,background:B.accent},"data-gufi-src":"huespedes.tsx:125"}),__gh("div",{style:{flex:1,background:"#c9c9ce"},"data-gufi-src":"huespedes.tsx:126"})),__gh("div",{style:{display:"flex",justifyContent:"space-between",fontSize:12.5,color:B.muted,marginTop:6},"data-gufi-src":"huespedes.tsx:128"},__gh("span",{"data-gufi-src":"huespedes.tsx:129"},"Mujeres ",pct(h.sexo.mujeres/(h.sexo.mujeres+h.sexo.hombres)*100)),__gh("span",{"data-gufi-src":"huespedes.tsx:130"},"Hombres ",pct(h.sexo.hombres/(h.sexo.mujeres+h.sexo.hombres)*100)))):null),__gh(Tarjeta,{titulo:"Con cu\xE1nta antelaci\xF3n reservan",sub:`Sobre ${num(h.antelacion.reduce((s,a)=>s+a.n,0))} estancias con la fecha de reserva`},__gh(Barras,{filas:h.antelacion.map(a=>({t:a.tramo,n:a.n})),total:h.antelacion.reduce((s,a)=>s+a.n,0),color:B.accent,vacio:"Sin fecha de reserva en estas estancias."})),__gh(Tarjeta,{titulo:"Por qu\xE9 canal",sub:"Estancias de cada plataforma"},__gh(Barras,{filas:canales,total:h.estancias,color:B.accent,vacio:"Sin estancias."})),__gh(Tarjeta,{titulo:"Cu\xE1nto gasta cada reserva",sub:gastoMedio==null?"Sin reservas":`${money2(gastoMedio)} de media, ${deFactura()?"lo facturado por reserva (todas sus camas)":"lo que deja cada reserva"}`},__gh(Barras,{filas:TRAMOS_IMPORTE.map(t=>({t:t[2],n:reservas.filter(r=>r.importe>=t[0]&&r.importesetQ(e.target.value),placeholder:"Buscar hu\xE9sped, pa\xEDs o reserva",style:{border:"none",outline:"none",background:"transparent",fontSize:13.5,flex:1,minWidth:0,color:B.ink},"data-gufi-src":"huespedes.tsx:163"})),__gh("button",{className:"p-btn",style:{marginLeft:"auto"},onClick:exportar2,disabled:exportando||!filas.length,"data-gufi-src":"huespedes.tsx:165"},__gh(import_lucide_react9.Download,{size:15}),exportando?"Preparando\u2026":"Excel")),errorExport?__gh("div",{className:"p-note",style:{color:B.red},"data-gufi-src":"huespedes.tsx:167"},errorExport):null,__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"huespedes.tsx:169"},filas.length?__gh("div",{style:{overflowX:"auto",maxHeight:620},"data-gufi-src":"huespedes.tsx:171"},__gh("table",{className:"p-table",style:{minWidth:860},"data-gufi-src":"huespedes.tsx:172"},__gh("thead",{"data-gufi-src":"huespedes.tsx:173"},__gh("tr",{"data-gufi-src":"huespedes.tsx:173"},__gh("th",{...th("huesped"),"data-gufi-src":"huespedes.tsx:174"},"Hu\xE9sped",flecha("huesped")),__gh("th",{...th("pais"),"data-gufi-src":"huespedes.tsx:175"},"Pa\xEDs",flecha("pais")),__gh("th",{"data-r":"1",...th("personas"),"data-gufi-src":"huespedes.tsx:176"},"Personas",flecha("personas")),__gh("th",{...th("entrada"),"data-gufi-src":"huespedes.tsx:177"},"Entrada",flecha("entrada")),__gh("th",{"data-r":"1",...th("noches"),"data-gufi-src":"huespedes.tsx:178"},"Noches",flecha("noches")),__gh("th",{"data-r":"1",...th("antelacion"),"data-gufi-src":"huespedes.tsx:179"},"Antelaci\xF3n",flecha("antelacion")),__gh("th",{...th("canal"),"data-gufi-src":"huespedes.tsx:180"},"Canal",flecha("canal")),__gh("th",{"data-r":"1","data-gufi-src":"huespedes.tsx:181"},deFactura()?"Facturado":"Importe"))),__gh("tbody",{"data-gufi-src":"huespedes.tsx:183"},filas.slice(0,500).map(e=>__gh("tr",{key:e.id,className:"p-click",onClick:()=>abrirEstancia(e),"data-gufi-src":"huespedes.tsx:185"},__gh("td",{style:{fontWeight:500,maxWidth:240,overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"huespedes.tsx:186"},tituloEstancia(e),pr.siguen.has(e.nro||`id${e.id}`)?__gh("span",{className:"b-pill",style:{marginLeft:8,padding:"3px 8px",color:B.accent,background:"rgba(29,29,31,.07)"},"data-gufi-src":"huespedes.tsx:188"},"pr\xF3rroga"):pr.empiezan.has(e.nro||`id${e.id}`)?__gh("span",{className:"b-pill",style:{marginLeft:8,padding:"3px 8px",color:B.muted,background:"#f2f2f4"},"data-gufi-src":"huespedes.tsx:189"},"alarg\xF3"):null),__gh("td",{style:{color:e.pais?B.ink:B.faint},"data-gufi-src":"huespedes.tsx:191"},paisEs(e.pais)),__gh("td",{"data-r":"1","data-gufi-src":"huespedes.tsx:192"},e.personas?num(e.personas):__gh("span",{style:{color:B.faint},"data-gufi-src":"huespedes.tsx:192"},"\u2014")),__gh("td",{"data-gufi-src":"huespedes.tsx:193"},fmtLarga(e.entrada)),__gh("td",{"data-r":"1","data-gufi-src":"huespedes.tsx:194"},num(e.noches)),__gh("td",{"data-r":"1","data-gufi-src":"huespedes.tsx:195"},e.antelacion==null?__gh("span",{style:{color:B.faint},"data-gufi-src":"huespedes.tsx:195"},"\u2014"):`${num(e.antelacion)} d`),__gh("td",{"data-gufi-src":"huespedes.tsx:196"},__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:7},"data-gufi-src":"huespedes.tsx:196"},__gh("span",{className:"p-dot",style:{background:canalColor(e.canal)},"data-gufi-src":"huespedes.tsx:196"}),e.canal)),__gh("td",{"data-r":"1","data-gufi-src":"huespedes.tsx:197"},money2(e.facturado)))))),filas.length>500?__gh("div",{className:"p-note",style:{padding:14,justifyContent:"center"},"data-gufi-src":"huespedes.tsx:202"},"Se ven los 500 primeros de ",num(filas.length),". El Excel los lleva todos."):null):__gh(Vacio,{titulo:"Ning\xFAn hu\xE9sped coincide",texto:"Prueba con otro nombre o pa\xEDs."})))}function Huespedes({f,periodo,propPorId,abrirEstancia}){return __gh(Estado,{f,periodo,hijos:d2=>__gh(Lista2,{d:d2,periodo,propPorId,abrirEstancia})})}var import_react15=require("react"),import_lucide_react15=require("lucide-react");var import_react10=require("react"),import_lucide_react10=require("lucide-react");var dosDig=n=>String(n).padStart(2,"0"),ymd=(y,m,d2)=>`${y}-${dosDig(m)}-${dosDig(d2)}`,ultimoDia=(y,m)=>new Date(y,m,0).getDate();function Ocupacion({api,token,propiedadIds,ambito}){let movil=useIsMobile(),[modo,setModo]=(0,import_react10.useState)("mes"),[cursor,setCursor]=(0,import_react10.useState)(()=>{let d2=new Date;return{y:d2.getFullYear(),m:d2.getMonth()+1}}),[data,setData]=(0,import_react10.useState)(null),[loading,setLoading]=(0,import_react10.useState)(!0),[error,setError]=(0,import_react10.useState)(""),[dia,setDia]=(0,import_react10.useState)(null),from=modo==="mes"?ymd(cursor.y,cursor.m,1):`${cursor.y}-01-01`,to=modo==="mes"?ymd(cursor.y,cursor.m,ultimoDia(cursor.y,cursor.m)):`${cursor.y}-12-31`,idsKey=(propiedadIds||[]).join(",");(0,import_react10.useEffect)(()=>{let vivo=!0;setLoading(!0),setError(""),setDia(null);let input={token,from,to};return idsKey&&(input.propiedadIds=idsKey.split(",").map(Number)),api("portal_ocupacion",input).then(r=>{vivo&&setData(r)}).catch(e=>{vivo&&(setData(null),setError(String(e&&e.message||e)))}).finally(()=>{vivo&&setLoading(!1)}),()=>{vivo=!1}},[api,token,from,to,idsKey]);let t=data&&data.totales,dias=data&&data.dias||[],unidades=data&&data.unidades||0,porDia=(0,import_react10.useMemo)(()=>{let m={};return dias.forEach(d2=>{m[d2.fecha]=d2}),m},[dias]),grupos=(0,import_react10.useMemo)(()=>{let unids=data&&data.por_unidad||[];if(!unids.length)return null;let porHab=unids.filter(u=>habitacionDe(u.nickname)).length===unids.length&&unids.length>1,m={};unids.forEach(u=>{let k=porHab?habitacionDe(u.nickname):unidadDe(u.nickname);m[k]||(m[k]={clave:k,nombre:u.nombre_publico,unidades:0,ocupadas:0,recaudacion:0,tuyo:0}),m[k].unidades++,m[k].ocupadas+=u.ocupadas,m[k].recaudacion+=u.recaudacion,m[k].tuyo+=u.tuyo});let nDias=dias.length||1;return{porHab,filas:Object.values(m).map(g=>({...g,ocupacion:g.unidades?g.ocupadas/(g.unidades*nDias)*100:null})).sort((a,b)=>b.ocupacion-a.ocupacion)}},[data,dias.length]),meses=data&&data.meses||[],mover=(0,import_react10.useCallback)(paso=>setCursor(c=>{if(modo==="anio")return{y:c.y+paso,m:c.m};let m=c.m+paso,y=c.y;return m<1&&(m=12,y--),m>12&&(m=1,y++),{y,m}}),[modo]);function exportar2(){let out=[[`Ocupaci\xF3n y recaudaci\xF3n \xB7 ${ambito||"todas mis unidades"}`],[`${dmyCSV(from)} a ${dmyCSV(to)}`,`${unidades} unidades`],[],["Fecha","Ocupadas","Disponibles","Ocupaci\xF3n %","Entradas","Salidas","Hu\xE9spedes","Recaudaci\xF3n (\u20AC)","Tu ingreso (\u20AC)"]];dias.forEach(d2=>out.push([dmyCSV(d2.fecha),d2.ocupadas,unidades,unidades?String((Number(d2.ocupadas/unidades*100)||0).toFixed(1)).replace(".",","):"",d2.entradas,d2.salidas,d2.huespedes,eurCSV(d2.recaudacion),eurCSV(d2.tuyo)])),t&&out.push([],["TOTAL",t.noches_ocupadas,t.noches_disponibles,String((Number(t.ocupacion==null?0:t.ocupacion)||0).toFixed(1)).replace(".",","),t.entradas,t.salidas,"",eurCSV(t.recaudacion),eurCSV(t.tuyo)]),downloadCSV(`ocupacion-${from}-${to}.csv`,out)}let cabecera=__gh("div",{className:"flex flex-wrap items-center justify-between gap-3 mb-5","data-gufi-src":"ocupacion.tsx:94"},__gh(Seg,{value:modo,onChange:setModo,options:[["mes","Mes"],["anio","A\xF1o"]]}),__gh("div",{className:"flex items-center gap-2","data-gufi-src":"ocupacion.tsx:96"},__gh("button",{onClick:()=>mover(-1),className:"b-press flex h-9 w-9 items-center justify-center rounded-xl",style:{background:"#fff",boxShadow:`inset 0 0 0 1px ${B.hair}`,border:"none",cursor:"pointer"},"data-gufi-src":"ocupacion.tsx:97"},__gh(import_lucide_react10.ChevronLeft,{size:18})),__gh("div",{className:"text-[15px] font-bold text-center b-num",style:{color:B.ink,minWidth:modo==="mes"?138:68},"data-gufi-src":"ocupacion.tsx:98"},modo==="mes"?`${MES[cursor.m]} ${cursor.y}`:cursor.y),__gh("button",{onClick:()=>mover(1),className:"b-press flex h-9 w-9 items-center justify-center rounded-xl",style:{background:"#fff",boxShadow:`inset 0 0 0 1px ${B.hair}`,border:"none",cursor:"pointer"},"data-gufi-src":"ocupacion.tsx:99"},__gh(import_lucide_react10.ChevronRight,{size:18}))));return loading?__gh("div",{className:"b-fade","data-gufi-src":"ocupacion.tsx:104"},cabecera,__gh(Spin,null)):error?__gh("div",{className:"b-fade","data-gufi-src":"ocupacion.tsx:105"},cabecera,__gh("div",{className:"b-card p-5 text-[13.5px]",style:{color:B.red},"data-gufi-src":"ocupacion.tsx:105"},"No se pudo calcular la ocupaci\xF3n: ",error)):!t||!unidades?__gh("div",{className:"b-fade","data-gufi-src":"ocupacion.tsx:106"},cabecera,__gh("div",{className:"b-card","data-gufi-src":"ocupacion.tsx:106"},__gh(Empty,{text:"No hay unidades en esta selecci\xF3n."}))):__gh("div",{className:"b-fade","data-gufi-src":"ocupacion.tsx:109"},cabecera,__gh("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3 mb-5","data-gufi-src":"ocupacion.tsx:112"},__gh(KPI,{label:"Ocupaci\xF3n",value:pct(t.ocupacion),sub:`${num(t.noches_ocupadas)} de ${num(t.noches_disponibles)} noches`,accent:B.accent}),__gh(KPI,{label:"Recaudaci\xF3n",value:money0(t.recaudacion),sub:"lo que pag\xF3 el hu\xE9sped"}),__gh(KPI,{label:"Tu ingreso",value:money0(t.tuyo),sub:`comisi\xF3n ${money0(t.comision)}`,accent:B.green}),__gh(KPI,{label:"Precio medio",value:t.adr==null?"\u2014":money2(t.adr),sub:"por noche vendida"}),__gh(KPI,{label:"Por unidad",value:t.revpar==null?"\u2014":money2(t.revpar),sub:"se venda o no (RevPAR)"}),__gh(KPI,{label:"Movimiento",value:`${num(t.entradas)} / ${num(t.salidas)}`,sub:"entradas / salidas"})),modo==="mes"?__gh("div",{className:"b-card mb-5 p-4 sm:p-5","data-gufi-src":"ocupacion.tsx:122"},__gh(SecTitle,{sub:`${unidades} unidad${unidades===1?"":"es"} \xB7 cada casilla es el % de la casa ocupado ese d\xEDa`},MES[cursor.m]," ",cursor.y),__gh(Rejilla,{y:cursor.y,m:cursor.m,porDia,unidades,sel:dia,onSel:setDia}),__gh(Leyenda,null),dia&&porDia[dia]?__gh(DetalleDia,{d:porDia[dia],unidades}):null):__gh("div",{className:"b-card mb-5","data-gufi-src":"ocupacion.tsx:129"},__gh(SecTitle,{sub:"ocupaci\xF3n media y recaudaci\xF3n de cada mes"},"Los doce meses"),__gh("div",{className:"px-4 sm:px-5 pb-5 flex flex-col gap-2.5","data-gufi-src":"ocupacion.tsx:131"},meses.map(g=>__gh("div",{key:g.mes,className:"flex items-center gap-2 sm:gap-3","data-gufi-src":"ocupacion.tsx:133"},__gh("div",{className:"text-[11.5px] sm:text-xs shrink-0 w-[76px] sm:w-[100px]",style:{color:B.muted},"data-gufi-src":"ocupacion.tsx:134"},mesLabel(g.mes)),__gh("div",{className:"flex-1 rounded-lg h-6 relative overflow-hidden",style:{background:"#f1ecec"},"data-gufi-src":"ocupacion.tsx:135"},__gh("div",{className:"absolute inset-y-0 left-0 rounded-lg",style:{width:`${Math.max(.6,Math.min(100,g.ocupacion||0))}%`,background:B.grad},"data-gufi-src":"ocupacion.tsx:136"}),__gh("span",{className:"absolute inset-y-0 left-2 flex items-center text-[11px] font-bold b-num",style:{color:(g.ocupacion||0)>22?"#fff":B.muted},"data-gufi-src":"ocupacion.tsx:137"},pct(g.ocupacion))),__gh("div",{className:"text-[12px] sm:text-[13px] font-bold text-right shrink-0 w-[70px] sm:w-[92px] b-num",style:{color:B.ink},"data-gufi-src":"ocupacion.tsx:139"},money0(g.recaudacion)))))),grupos&&grupos.filas.length>1?__gh("div",{className:"b-card overflow-hidden mb-5","data-gufi-src":"ocupacion.tsx:147"},__gh(SecTitle,{sub:grupos.porHab?"una fila por habitaci\xF3n, no por cama":"una fila por unidad"},grupos.porHab?"Por habitaci\xF3n":"Por propiedad"),movil?__gh("div",{className:"px-4 pb-4","data-gufi-src":"ocupacion.tsx:152"},grupos.filas.map(g=>__gh("div",{key:g.clave,className:"b-row","data-gufi-src":"ocupacion.tsx:154"},__gh("div",{className:"flex items-baseline justify-between gap-3 mb-2","data-gufi-src":"ocupacion.tsx:155"},__gh("span",{className:"text-[14px] font-bold",style:{color:B.ink},"data-gufi-src":"ocupacion.tsx:156"},g.clave),__gh("span",{className:"text-[15px] font-bold b-num",style:{color:B.accent},"data-gufi-src":"ocupacion.tsx:157"},pct(g.ocupacion))),__gh("div",{className:"rounded-lg h-1.5 mb-2.5 overflow-hidden",style:{background:"#f1ecec"},"data-gufi-src":"ocupacion.tsx:159"},__gh("div",{style:{width:`${Math.min(100,g.ocupacion||0)}%`,height:"100%",background:B.grad},"data-gufi-src":"ocupacion.tsx:160"})),__gh("div",{className:"b-kv","data-gufi-src":"ocupacion.tsx:162"},__gh("span",{"data-gufi-src":"ocupacion.tsx:162"},grupos.porHab?"Camas":"Unidades"),__gh("span",{"data-gufi-src":"ocupacion.tsx:162"},num(g.unidades))),__gh("div",{className:"b-kv","data-gufi-src":"ocupacion.tsx:163"},__gh("span",{"data-gufi-src":"ocupacion.tsx:163"},"Noches vendidas"),__gh("span",{"data-gufi-src":"ocupacion.tsx:163"},num(g.ocupadas))),__gh("div",{className:"b-kv","data-gufi-src":"ocupacion.tsx:164"},__gh("span",{"data-gufi-src":"ocupacion.tsx:164"},"Recaudaci\xF3n"),__gh("span",{"data-gufi-src":"ocupacion.tsx:164"},money2(g.recaudacion))),__gh("div",{className:"b-kv","data-gufi-src":"ocupacion.tsx:165"},__gh("span",{"data-gufi-src":"ocupacion.tsx:165"},"Tu ingreso"),__gh("span",{style:{color:B.green},"data-gufi-src":"ocupacion.tsx:165"},money2(g.tuyo)))))):__gh(TableWrap,{min:680},__gh("thead",{"data-gufi-src":"ocupacion.tsx:171"},__gh("tr",{"data-gufi-src":"ocupacion.tsx:171"},__gh(Th,null,grupos.porHab?"Habitaci\xF3n":"Propiedad"),__gh(Th,{r:!0},grupos.porHab?"Camas":"Unidades"),__gh(Th,{r:!0},"Noches"),__gh(Th,null,"Ocupaci\xF3n"),__gh(Th,{r:!0},"Recaudaci\xF3n"),__gh(Th,{r:!0},"Tu ingreso"))),__gh("tbody",{"data-gufi-src":"ocupacion.tsx:172"},grupos.filas.map(g=>__gh("tr",{key:g.clave,"data-gufi-src":"ocupacion.tsx:174"},__gh(Td,{b:!0},g.clave,g.nombre?__gh("div",{className:"text-[11.5px] font-normal",style:{color:B.faint},"data-gufi-src":"ocupacion.tsx:175"},g.nombre):null),__gh(Td,{r:!0},num(g.unidades)),__gh(Td,{r:!0},num(g.ocupadas)),__gh(Td,null,__gh("div",{className:"flex items-center gap-2","data-gufi-src":"ocupacion.tsx:179"},__gh("div",{className:"rounded-full h-1.5 flex-1 overflow-hidden",style:{background:"#f1ecec",minWidth:70},"data-gufi-src":"ocupacion.tsx:180"},__gh("div",{style:{width:`${Math.min(100,g.ocupacion||0)}%`,height:"100%",background:B.grad},"data-gufi-src":"ocupacion.tsx:181"})),__gh("span",{className:"b-num font-semibold",style:{color:B.accent,width:52,textAlign:"right"},"data-gufi-src":"ocupacion.tsx:183"},pct(g.ocupacion)))),__gh(Td,{r:!0},money2(g.recaudacion)),__gh(Td,{r:!0,b:!0},__gh("span",{style:{color:B.green},"data-gufi-src":"ocupacion.tsx:187"},money2(g.tuyo)))))))):null,__gh(PorCanal,{filas:data&&data.por_canal||[],total:t.recaudacion,movil}),__gh("div",{className:"b-card overflow-hidden","data-gufi-src":"ocupacion.tsx:198"},__gh(SecTitle,{sub:"lo que se durmi\xF3 y lo que produjo cada d\xEDa",right:__gh("button",{onClick:exportar2,className:"b-press flex items-center gap-1.5 rounded-lg px-3 py-2 text-[12.5px] font-semibold",style:{background:"#fff",boxShadow:`inset 0 0 0 1px ${B.hair}`,color:B.muted,border:"none",cursor:"pointer"},"data-gufi-src":"ocupacion.tsx:200"},__gh(import_lucide_react10.Download,{size:14})," Excel")},"D\xEDa a d\xEDa"),dias.length?movil?__gh("div",{className:"px-4 pb-4","data-gufi-src":"ocupacion.tsx:205"},dias.map(d2=>{let p=unidades?d2.ocupadas/unidades*100:null;return __gh("div",{key:d2.fecha,className:"b-row","data-gufi-src":"ocupacion.tsx:207"},__gh("div",{className:"flex items-baseline justify-between gap-3 mb-2","data-gufi-src":"ocupacion.tsx:208"},__gh("span",{className:"text-[13.5px] font-bold capitalize",style:{color:B.ink},"data-gufi-src":"ocupacion.tsx:209"},fmtDia(d2.fecha)),__gh("span",{className:"text-[14px] font-bold b-num",style:{color:p>0?B.accent:B.faint},"data-gufi-src":"ocupacion.tsx:210"},pct(p))),__gh("div",{className:"b-kv","data-gufi-src":"ocupacion.tsx:212"},__gh("span",{"data-gufi-src":"ocupacion.tsx:212"},"Ocupadas"),__gh("span",{"data-gufi-src":"ocupacion.tsx:212"},num(d2.ocupadas)," de ",num(unidades))),__gh("div",{className:"b-kv","data-gufi-src":"ocupacion.tsx:213"},__gh("span",{"data-gufi-src":"ocupacion.tsx:213"},"Entradas / salidas"),__gh("span",{"data-gufi-src":"ocupacion.tsx:213"},num(d2.entradas)," / ",num(d2.salidas))),__gh("div",{className:"b-kv","data-gufi-src":"ocupacion.tsx:214"},__gh("span",{"data-gufi-src":"ocupacion.tsx:214"},"Recaudaci\xF3n"),__gh("span",{"data-gufi-src":"ocupacion.tsx:214"},money2(d2.recaudacion))),__gh("div",{className:"b-kv","data-gufi-src":"ocupacion.tsx:215"},__gh("span",{"data-gufi-src":"ocupacion.tsx:215"},"Tu ingreso"),__gh("span",{style:{color:B.green},"data-gufi-src":"ocupacion.tsx:215"},money2(d2.tuyo))))})):__gh(TableWrap,{min:720},__gh("thead",{"data-gufi-src":"ocupacion.tsx:221"},__gh("tr",{"data-gufi-src":"ocupacion.tsx:221"},__gh(Th,null,"D\xEDa"),__gh(Th,{r:!0},"Ocupadas"),__gh(Th,{r:!0},"Ocupaci\xF3n"),__gh(Th,{r:!0},"Entradas"),__gh(Th,{r:!0},"Salidas"),__gh(Th,{r:!0},"Hu\xE9spedes"),__gh(Th,{r:!0},"Recaudaci\xF3n"),__gh(Th,{r:!0},"Tu ingreso"))),__gh("tbody",{"data-gufi-src":"ocupacion.tsx:222"},dias.map(d2=>{let p=unidades?d2.ocupadas/unidades*100:null;return __gh("tr",{key:d2.fecha,"data-gufi-src":"ocupacion.tsx:224"},__gh(Td,{b:!0},__gh("span",{className:"capitalize","data-gufi-src":"ocupacion.tsx:225"},fmtDia(d2.fecha))),__gh(Td,{r:!0},num(d2.ocupadas)," ",__gh("span",{style:{color:B.faint},"data-gufi-src":"ocupacion.tsx:226"},"/ ",num(unidades))),__gh(Td,{r:!0},__gh("span",{className:"font-semibold",style:{color:p>0?B.accent:B.faint},"data-gufi-src":"ocupacion.tsx:227"},pct(p))),__gh(Td,{r:!0},d2.entradas?num(d2.entradas):__gh("span",{style:{color:B.faint},"data-gufi-src":"ocupacion.tsx:228"},"\u2014")),__gh(Td,{r:!0},d2.salidas?num(d2.salidas):__gh("span",{style:{color:B.faint},"data-gufi-src":"ocupacion.tsx:229"},"\u2014")),__gh(Td,{r:!0},d2.huespedes?num(d2.huespedes):__gh("span",{style:{color:B.faint},"data-gufi-src":"ocupacion.tsx:230"},"\u2014")),__gh(Td,{r:!0},money2(d2.recaudacion)),__gh(Td,{r:!0,b:!0},__gh("span",{style:{color:B.green},"data-gufi-src":"ocupacion.tsx:232"},money2(d2.tuyo))))}),__gh("tr",{"data-gufi-src":"ocupacion.tsx:235"},__gh(Td,{b:!0},"Total"),__gh(Td,{r:!0,b:!0},num(t.noches_ocupadas)),__gh(Td,{r:!0,b:!0},__gh("span",{style:{color:B.accent},"data-gufi-src":"ocupacion.tsx:238"},pct(t.ocupacion))),__gh(Td,{r:!0,b:!0},num(t.entradas)),__gh(Td,{r:!0,b:!0},num(t.salidas)),__gh(Td,null),__gh(Td,{r:!0,b:!0},money2(t.recaudacion)),__gh(Td,{r:!0,b:!0},__gh("span",{style:{color:B.green},"data-gufi-src":"ocupacion.tsx:243"},money2(t.tuyo)))))):__gh(Empty,{text:"Sin d\xEDas en este rango."})))}function Rejilla({y,m,porDia,unidades,sel,onSel}){let ultimo=ultimoDia(y,m),hueco=(new Date(y,m-1,1).getDay()+6)%7,celdas=[];for(let i=0;ionSel(activo?null:f),className:"b-press",title:info?`${d2}/${m} \xB7 ${info.ocupadas} de ${unidades} ocupadas \xB7 ${money2(info.recaudacion)}`:`${d2}/${m}`,style:{height:"clamp(42px, 6vw, 64px)",borderRadius:10,background:fondoOcup(p),border:"none",cursor:"pointer",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:1,boxShadow:activo?`0 0 0 2px ${B.gold}`:"none",padding:0},"data-gufi-src":"ocupacion.tsx:268"},__gh("span",{className:"b-num",style:{fontSize:12,fontWeight:700,color:tintaOcup(p),lineHeight:1},"data-gufi-src":"ocupacion.tsx:273"},d2),__gh("span",{className:"b-num",style:{fontSize:9.5,fontWeight:600,color:tintaOcup(p),opacity:.85,lineHeight:1},"data-gufi-src":"ocupacion.tsx:274"},p==null?"":Math.round(p)+"%")))}return __gh("div",{"data-gufi-src":"ocupacion.tsx:279"},__gh("div",{style:{display:"grid",gridTemplateColumns:"repeat(7, minmax(0,1fr))",gap:5,marginBottom:5},"data-gufi-src":"ocupacion.tsx:280"},["L","M","X","J","V","S","D"].map((d2,k)=>__gh("div",{key:k,className:"text-center text-[10px] font-bold",style:{color:B.faint},"data-gufi-src":"ocupacion.tsx:281"},d2))),__gh("div",{style:{display:"grid",gridTemplateColumns:"repeat(7, minmax(0,1fr))",gap:5},"data-gufi-src":"ocupacion.tsx:283"},celdas))}var Leyenda=()=>__gh("div",{className:"flex items-center gap-2 mt-3.5 text-[11.5px]",style:{color:B.faint},"data-gufi-src":"ocupacion.tsx:289"},__gh("span",{"data-gufi-src":"ocupacion.tsx:290"},"Vac\xEDo"),[0,25,50,75,100].map(p=>__gh("span",{key:p,style:{width:22,height:10,borderRadius:3,background:fondoOcup(p)},"data-gufi-src":"ocupacion.tsx:291"})),__gh("span",{"data-gufi-src":"ocupacion.tsx:292"},"Lleno"));function DetalleDia({d:d2,unidades}){let p=unidades?d2.ocupadas/unidades*100:null;return __gh("div",{className:"mt-4 rounded-xl px-4 py-3 b-fade",style:{background:B.accentSoft,boxShadow:`inset 0 0 0 1px ${B.accent}22`},"data-gufi-src":"ocupacion.tsx:299"},__gh("div",{className:"text-[13.5px] font-bold capitalize mb-1.5",style:{color:B.accent},"data-gufi-src":"ocupacion.tsx:300"},fmtDia(d2.fecha)),__gh("div",{className:"flex flex-wrap gap-x-6 gap-y-1 text-[12.5px]",style:{color:B.muted},"data-gufi-src":"ocupacion.tsx:301"},__gh("span",{"data-gufi-src":"ocupacion.tsx:302"},"Ocupadas ",__gh("b",{style:{color:B.ink},"data-gufi-src":"ocupacion.tsx:302"},num(d2.ocupadas)," de ",num(unidades))," (",pct(p),")"),__gh("span",{"data-gufi-src":"ocupacion.tsx:303"},"Entradas ",__gh("b",{style:{color:B.ink},"data-gufi-src":"ocupacion.tsx:303"},num(d2.entradas))),__gh("span",{"data-gufi-src":"ocupacion.tsx:304"},"Salidas ",__gh("b",{style:{color:B.ink},"data-gufi-src":"ocupacion.tsx:304"},num(d2.salidas))),__gh("span",{"data-gufi-src":"ocupacion.tsx:305"},"Recaudaci\xF3n ",__gh("b",{style:{color:B.ink},"data-gufi-src":"ocupacion.tsx:305"},money2(d2.recaudacion))),__gh("span",{"data-gufi-src":"ocupacion.tsx:306"},"Tu ingreso ",__gh("b",{style:{color:B.green},"data-gufi-src":"ocupacion.tsx:306"},money2(d2.tuyo)))))}var import_react11=require("react"),import_lucide_react11=require("lucide-react");var dosDig2=n=>String(n).padStart(2,"0"),ymd2=d2=>`${d2.getFullYear()}-${dosDig2(d2.getMonth()+1)}-${dosDig2(d2.getDate())}`,diasDelMes=ym=>new Date(Number(ym.slice(0,4)),Number(ym.slice(5,7)),0).getDate(),DOW=["","Lunes","Martes","Mi\xE9rcoles","Jueves","Viernes","S\xE1bado","Domingo"],TIPO={MIXTA:"Mixtas",MIXTO:"Mixtas",MASC:"Masculinas",FEME:"Femeninas"},tipoDe=hab=>{let w=String(hab||"").split(" ")[1];return w?TIPO[w]||w.charAt(0)+w.slice(1).toLowerCase():null};function Informe({api,token,propiedadIds,ambito,ownerName}){let movil=useIsMobile(),[hist,setHist]=(0,import_react11.useState)(null),[fut,setFut]=(0,import_react11.useState)(null),[loading,setLoading]=(0,import_react11.useState)(!0),[error,setError]=(0,import_react11.useState)(""),idsKey=(propiedadIds||[]).join(","),hoy=(0,import_react11.useMemo)(()=>ymd2(new Date),[]),finFuturo=(0,import_react11.useMemo)(()=>{let d2=new Date;return ymd2(new Date(d2.getFullYear(),d2.getMonth()+5,0))},[]);if((0,import_react11.useEffect)(()=>{let vivo=!0;setLoading(!0),setError("");let scope=idsKey?{propiedadIds:idsKey.split(",").map(Number)}:{};return Promise.all([api("portal_ocupacion",{token,...scope,from:"apertura",to:hoy,incluir_dias:!1}),api("portal_ocupacion",{token,...scope,from:hoy,to:finFuturo})]).then(([h,f])=>{vivo&&(setHist(h),setFut(f))}).catch(e=>{vivo&&(setHist(null),setFut(null),setError(String(e&&e.message||e)))}).finally(()=>{vivo&&setLoading(!1)}),()=>{vivo=!1}},[api,token,idsKey,hoy,finFuturo]),loading)return __gh(Spin,null);if(error)return __gh("div",{className:"b-card p-5 text-[13.5px]",style:{color:B.red},"data-gufi-src":"informe.tsx:68"},"No se pudo montar el informe: ",error);if(!hist||!hist.totales||!hist.unidades)return __gh("div",{className:"b-card","data-gufi-src":"informe.tsx:69"},__gh(Empty,{text:"Todav\xEDa no hay noches vendidas para esta selecci\xF3n."}));let u=hist.unidades,t=hist.totales,diaHoy=(fut&&fut.dias||[]).find(d2=>d2.fecha===hoy),ocupHoy=diaHoy&&u?diaHoy.ocupadas/u*100:null,semanas=(hist.semanas||[]).slice().reverse();return __gh("div",{className:"b-fade","data-gufi-src":"informe.tsx:81"},__gh(Cabecera,{hist,ambito:ambito||ownerName,unidades:u}),__gh(Lectura,{hist,fut,unidades:u,hoy}),__gh(Bloque,{n:1,titulo:"Hoy",sub:"la foto del negocio ahora mismo"}),__gh("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-7","data-gufi-src":"informe.tsx:87"},__gh(KPI,{label:"Ocupaci\xF3n hoy",value:pct(ocupHoy),sub:diaHoy?`${num(diaHoy.ocupadas)} de ${num(u)} camas`:"\u2014",accent:B.accent}),__gh(KPI,{label:"Ingresos hoy",value:diaHoy?money0(diaHoy.recaudacion):"\u2014",sub:"brutos ya vendidos"}),__gh(KPI,{label:"Entran / salen",value:diaHoy?`${num(diaHoy.entradas)} / ${num(diaHoy.salidas)}`:"\u2014",sub:"movimiento del d\xEDa"}),__gh(KPI,{label:"Desde apertura",value:money0(t.recaudacion),sub:`${num(t.ocupadas)} camas-noche`,accent:B.green})),__gh(Bloque,{n:2,titulo:"Desde apertura",sub:"c\xF3mo va evolucionando semana a semana"}),__gh("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-3","data-gufi-src":"informe.tsx:95"},__gh(KPI,{label:"Ocupaci\xF3n media",value:pct(t.ocupacion),sub:`${num(t.ocupadas)} de ${num(t.noches_disponibles)} noches`,accent:B.accent}),__gh(KPI,{label:"Ingresos brutos",value:money0(t.recaudacion),sub:"alojamiento"}),__gh(KPI,{label:"Precio medio",value:t.adr==null?"\u2014":money2(t.adr),sub:"por cama vendida"}),__gh(KPI,{label:"Tu ingreso",value:money0(t.tuyo),sub:`comisi\xF3n ${money0(t.comision)}`,accent:B.green})),__gh(Comportamiento,{r:hist.reservas}),__gh(Semanas,{semanas,unidades:u,movil}),__gh(MesAMes2,{hist,fut,unidades:u,hoy}),__gh(PorCanal,{filas:hist.por_canal||[],total:t.recaudacion,movil}),__gh(Paises,{perfil:hist.perfil}),__gh(Bloque,{n:3,titulo:"Futuro",sub:"reservas que YA existen a d\xEDa de hoy"}),__gh(Futuro,{fut,unidades:u,hoy,movil}),__gh(Antelacion,{perfil:hist.perfil}),__gh(Bloque,{n:4,titulo:"Por habitaci\xF3n",sub:"qu\xE9 aporta cada una de verdad"}),__gh(Habitaciones,{unidades:hist.por_unidad||[],dias:t.dias,total:t.recaudacion,movil}),__gh(Bloque,{n:5,titulo:"Patr\xF3n semanal",sub:"qu\xE9 d\xEDas funcionan y cu\xE1les est\xE1n flojos"}),__gh(PatronSemanal,{dow:hist.dow||[],unidades:u,movil}),__gh(NoConectado,null),__gh("div",{className:"flex justify-end mt-5","data-gufi-src":"informe.tsx:119"},__gh("button",{onClick:()=>exportar(hist,fut,ambito||ownerName),className:"b-press flex items-center gap-1.5 rounded-lg px-3.5 py-2.5 text-[13px] font-semibold",style:{background:"#fff",boxShadow:`inset 0 0 0 1px ${B.hair}`,color:B.muted,border:"none",cursor:"pointer"},"data-gufi-src":"informe.tsx:120"},__gh(import_lucide_react11.Download,{size:15})," Bajar el informe en Excel")))}function exportar(hist,fut,ambito){let u=hist.unidades,out=[["Informe de gesti\xF3n",ambito||"todas mis unidades"],["Desde",dmyCSV(hist.apertura),"hasta",dmyCSV(hist.to),`${u} unidades`],[],["SEMANA","Desde","Hasta","D\xEDas","Ocupaci\xF3n %","Camas/d\xEDa","Ingresos (\u20AC)","\u20AC/cama"]];(hist.semanas||[]).forEach(s=>out.push(["",dmyCSV(s.desde),dmyCSV(s.hasta),s.dias,String((Number(s.ocupacion==null?0:s.ocupacion)||0).toFixed(1)).replace(".",","),Math.round(s.ocupadas/s.dias),eurCSV(s.recaudacion),s.adr==null?"":eurCSV(s.adr)])),out.push([],["D\xCDA DE LA SEMANA","Ocupaci\xF3n %","Camas/d\xEDa","Ingresos/d\xEDa (\u20AC)"]),(hist.dow||[]).forEach(d2=>out.push([DOW[d2.dow],String((Number(d2.ocupacion==null?0:d2.ocupacion)||0).toFixed(1)).replace(".",","),Math.round(d2.ocupadas/d2.dias),eurCSV(d2.recaudacion/d2.dias)])),out.push([],["FUTURO \xB7 MES","Ocupaci\xF3n %","Camas-noche","Ingresos (\u20AC)"]),(fut&&fut.meses||[]).forEach(m=>out.push([mesLabel(m.mes),String((Number(m.ocupacion==null?0:m.ocupacion)||0).toFixed(1)).replace(".",","),m.ocupadas,eurCSV(m.recaudacion)])),out.push([],["POR HABITACI\xD3N","Camas","Noches vendidas","Ocupaci\xF3n %","Ingresos (\u20AC)"]);let hs=agrupaHabitaciones(hist.por_unidad||[],hist.totales.dias);(hs?hs.filas:[]).forEach(h=>out.push([h.clave,h.unidades,h.ocupadas,String((Number(h.ocupacion==null?0:h.ocupacion)||0).toFixed(1)).replace(".",","),eurCSV(h.recaudacion)])),downloadCSV(`informe-gestion-${hist.to}.csv`,out)}function Cabecera({hist,ambito,unidades}){let declarada=hist.apertura_origen==="declarada",previas=hist.previas;return __gh("div",{className:"mb-6","data-gufi-src":"informe.tsx:155"},__gh("div",{className:"b-card p-5 sm:p-7",style:{background:B.grad,border:"none",position:"relative",overflow:"hidden"},"data-gufi-src":"informe.tsx:156"},__gh("div",{className:"b-aura","data-gufi-src":"informe.tsx:157"}),__gh("div",{className:"relative","data-gufi-src":"informe.tsx:158"},__gh("div",{className:"text-[11px] font-semibold uppercase tracking-[.08em]",style:{color:"rgba(255,255,255,.62)"},"data-gufi-src":"informe.tsx:159"},"Informe de gesti\xF3n"),__gh("div",{className:"text-[26px] sm:text-[34px] font-semibold text-white leading-[1.08] mt-1.5",style:{letterSpacing:"-.035em"},"data-gufi-src":"informe.tsx:160"},ambito||"Mis unidades"),__gh("div",{className:"text-[13px] mt-2.5",style:{color:"rgba(255,255,255,.76)"},"data-gufi-src":"informe.tsx:161"},num(unidades)," unidad",unidades===1?"":"es"," \xB7 desde ",declarada?"la apertura":"la primera noche vendida"," (",fmtDate(hist.apertura),") \xB7 ",num(hist.totales.dias)," d\xEDas"))),declarada&&previas&&previas.noches?__gh("div",{className:"mt-2.5 rounded-2xl px-4 py-2.5 text-[12.5px]",style:{background:"#fff",border:`1px solid ${B.hair}`,color:B.muted},"data-gufi-src":"informe.tsx:167"},"Antes de abrir ya se hab\xEDan dormido ",__gh("b",{style:{color:B.ink},"data-gufi-src":"informe.tsx:168"},num(previas.noches)," camas-noche")," (",money2(previas.recaudacion),"), desde el ",fmtDate(hist.primera_noche),". Quedan fuera de este informe, que empieza el d\xEDa de la apertura."):null)}function MesAMes2({hist,fut,unidades,hoy}){let meses=(0,import_react11.useMemo)(()=>{let m={};return(hist.meses||[]).forEach(x=>{m[x.mes]={mes:x.mes,dias:x.dias,ocupadas:x.ocupadas,recaudacion:x.recaudacion,futuro:!1}}),(fut&&fut.dias||[]).filter(d2=>d2.fecha>hoy).forEach(d2=>{let k=d2.fecha.slice(0,7);m[k]||(m[k]={mes:k,dias:0,ocupadas:0,recaudacion:0,futuro:!0}),m[k].dias++,m[k].ocupadas+=d2.ocupadas,m[k].recaudacion+=d2.recaudacion}),Object.values(m).sort((a,b)=>a.mes.localeCompare(b.mes)).map(g=>({...g,ocupacion:unidades&&g.dias?g.ocupadas/(unidades*g.dias)*100:null}))},[hist,fut,hoy,unidades]);if(meses.length<2)return null;let max=Math.max(1,...meses.map(g=>g.recaudacion));return __gh("div",{className:"b-card overflow-hidden mb-7","data-gufi-src":"informe.tsx:196"},__gh(SecTitle,{sub:"lo que lleva cada mes desde que abriste; los que a\xFAn no han llegado ense\xF1an lo que ya est\xE1 vendido"},"Mes a mes"),__gh("div",{className:"px-4 sm:px-6 pb-5 flex flex-col gap-3","data-gufi-src":"informe.tsx:198"},meses.map(g=>__gh("div",{key:g.mes,className:"flex items-center gap-2.5 sm:gap-4",style:{opacity:g.futuro?.72:1},"data-gufi-src":"informe.tsx:200"},__gh("div",{className:"text-[12px] sm:text-[13px] shrink-0 w-[76px] sm:w-[104px]",style:{color:B.muted},"data-gufi-src":"informe.tsx:201"},mesLabel(g.mes)),__gh("div",{className:"flex-1 rounded-xl h-7 relative overflow-hidden",style:{background:"#f1f1f2"},"data-gufi-src":"informe.tsx:202"},g.recaudacion>0?__gh("div",{className:"absolute inset-y-0 left-0 rounded-xl",style:{width:`${Math.max(2.5,g.recaudacion/max*100)}%`,background:B.grad},"data-gufi-src":"informe.tsx:203"}):null),__gh("div",{className:"text-[12px] sm:text-[12.5px] text-right shrink-0 w-[46px] sm:w-[54px] b-num",style:{color:B.accent,fontWeight:600},"data-gufi-src":"informe.tsx:205"},pct(g.ocupacion)),__gh("div",{className:"text-[12.5px] sm:text-[14px] font-semibold text-right shrink-0 w-[68px] sm:w-[92px] b-num",style:{color:g.recaudacion?B.ink:B.faint},"data-gufi-src":"informe.tsx:206"},money0(g.recaudacion))))))}function Antelacion({perfil}){let filas=perfil&&perfil.antelacion||[],total=filas.reduce((a,x)=>a+x.n,0);if(!total)return null;let max=Math.max(1,...filas.map(x=>x.n)),ultima=filas.find(x=>x.orden===1);return __gh("div",{className:"b-card overflow-hidden mb-7","data-gufi-src":"informe.tsx:225"},__gh(SecTitle,{sub:"cu\xE1nto tiempo pasa entre que reservan y que llegan"},"C\xF3mo entra la reserva"),__gh("div",{className:"px-4 sm:px-6 pb-5 flex flex-col gap-2.5","data-gufi-src":"informe.tsx:227"},filas.map(x=>__gh("div",{key:x.orden,className:"flex items-center gap-2.5 sm:gap-4","data-gufi-src":"informe.tsx:229"},__gh("div",{className:"text-[12px] sm:text-[13px] shrink-0 w-[112px] sm:w-[150px]",style:{color:B.muted},"data-gufi-src":"informe.tsx:230"},x.tramo),__gh("div",{className:"flex-1 rounded-lg h-6 relative overflow-hidden",style:{background:"#f1f1f2"},"data-gufi-src":"informe.tsx:231"},__gh("div",{className:"absolute inset-y-0 left-0 rounded-lg",style:{width:`${Math.max(1.5,x.n/max*100)}%`,background:B.grad},"data-gufi-src":"informe.tsx:232"}),__gh("span",{className:"absolute inset-y-0 left-2.5 flex items-center text-[11px] font-semibold b-num",style:{color:x.n/max>.2?"rgba(255,255,255,.92)":B.faint},"data-gufi-src":"informe.tsx:233"},pct(x.n/total*100))),__gh("div",{className:"text-[12px] sm:text-[13px] text-right shrink-0 w-[52px] b-num",style:{color:B.ink,fontWeight:600},"data-gufi-src":"informe.tsx:235"},num(x.n)),__gh("div",{className:"hidden sm:block text-[13px] text-right shrink-0 w-[84px] b-num",style:{color:B.muted},"data-gufi-src":"informe.tsx:236"},money0(x.recaudacion)))),ultima?__gh("div",{className:"text-[12.5px] mt-1.5",style:{color:B.muted,lineHeight:1.6},"data-gufi-src":"informe.tsx:240"},__gh("b",{style:{color:B.ink},"data-gufi-src":"informe.tsx:241"},pct(ultima.n/total*100))," de tus reservas entra el mismo d\xEDa o la v\xEDspera. Con ese ritmo, un mes que hoy parece vac\xEDo no lo est\xE1: se llena en la \xFAltima semana."):null))}var Barras2=({filas,etiqueta,valor,base,ancho})=>{let max=Math.max(1,...filas.map(x=>x.n));return __gh("div",{className:"flex flex-col gap-2","data-gufi-src":"informe.tsx:258"},filas.map((x,k)=>__gh("div",{key:k,className:"flex items-center gap-2.5 sm:gap-4","data-gufi-src":"informe.tsx:260"},__gh("div",{className:"text-[12px] sm:text-[13px] shrink-0 truncate",style:{color:B.muted,width:ancho||150},title:etiqueta(x),"data-gufi-src":"informe.tsx:261"},etiqueta(x)),__gh("div",{className:"flex-1 rounded-lg h-5 relative overflow-hidden",style:{background:"#f1f1f2"},"data-gufi-src":"informe.tsx:262"},__gh("div",{className:"absolute inset-y-0 left-0 rounded-lg",style:{width:`${Math.max(1.5,x.n/max*100)}%`,background:B.grad},"data-gufi-src":"informe.tsx:263"})),__gh("div",{className:"text-[12.5px] text-right shrink-0 w-[104px] whitespace-nowrap b-num",style:{color:B.ink,fontWeight:600},"data-gufi-src":"informe.tsx:265"},num(x.n)," \xB7 ",pct(x.n/base*100)))))};function Paises({perfil}){let filas=perfil&&perfil.paises||[],con=perfil&&perfil.con_pais||0,total=perfil&&perfil.total||0,v=perfil&&perfil.viajeros||null,hayRegistro=!!(v&&v.fichas);if((!filas.length||!con)&&!hayRegistro)return null;let hombres=hayRegistro?(v.sexos.find(x=>x.sexo==="Hombres")||{n:0}).n:0,mujeres=hayRegistro?(v.sexos.find(x=>x.sexo==="Mujeres")||{n:0}).n:0;return __gh("div",{className:"b-card overflow-hidden mb-7","data-gufi-src":"informe.tsx:282"},__gh(SecTitle,{sub:"para saber a qui\xE9n le est\xE1s hablando cuando hagas campa\xF1a"},"Qui\xE9n duerme aqu\xED"),hayRegistro?__gh(__gf,null,__gh("div",{className:"grid grid-cols-2 lg:grid-cols-3 gap-3 px-4 sm:px-6 pb-1","data-gufi-src":"informe.tsx:287"},__gh(KPI,{label:"Edad media",value:v.edad_media==null?"\u2014":`${num(v.edad_media)} a\xF1os`,sub:`${num(v.fichas)} viajeros registrados`,accent:B.accent}),__gh(KPI,{label:"Hombres / mujeres",value:`${num(hombres)} / ${num(mujeres)}`,sub:hombres+mujeres?`${pct(hombres/(hombres+mujeres)*100)} ellos`:"\u2014"}),__gh(KPI,{label:"Con ficha de viajero",value:pct(v.estancias?v.estancias_con_registro/v.estancias*100:null),sub:`${num(v.estancias_con_registro)} de ${num(v.estancias)} estancias`})),v.edades.length?__gh("div",{className:"px-4 sm:px-6 pt-4 pb-5","data-gufi-src":"informe.tsx:293"},__gh("div",{className:"text-[13px] font-semibold mb-3",style:{color:B.ink},"data-gufi-src":"informe.tsx:294"},"Por edad"),__gh(Barras2,{filas:v.edades,etiqueta:x=>x.tramo,base:v.fichas,ancho:130})):null,__gh("div",{className:"px-4 sm:px-6 pb-4 text-[12.5px]",style:{color:B.muted,lineHeight:1.6},"data-gufi-src":"informe.tsx:298"},"La edad y el sexo salen del ",__gh("b",{style:{color:B.sub},"data-gufi-src":"informe.tsx:299"},"registro de viajeros"),", que se rellena en el check-in \u2014 por eso cubre ",pct(v.estancias?v.estancias_con_registro/v.estancias*100:null)," de las estancias y no todas. Cuanto m\xE1s check-in online, mejor sale este cuadro.")):null,filas.length&&con?__gh("div",{className:"px-4 sm:px-6 pb-5",style:{borderTop:hayRegistro?`1px solid ${B.hair}`:"none",paddingTop:hayRegistro?18:0},"data-gufi-src":"informe.tsx:307"},__gh("div",{className:"text-[13px] font-semibold mb-1",style:{color:B.ink},"data-gufi-src":"informe.tsx:308"},"De qu\xE9 pa\xEDs llegan"),__gh("div",{className:"text-[12px] mb-3",style:{color:B.faint},"data-gufi-src":"informe.tsx:309"},"De las ",num(con)," reservas que traen pa\xEDs, de ",num(total),". Lo manda el canal, y no siempre."),__gh(Barras2,{filas,etiqueta:x=>x.pais,base:con,ancho:170})):null)}function Comportamiento({r}){return r?__gh("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-6","data-gufi-src":"informe.tsx:322"},__gh(KPI,{label:"Estancia media",value:r.estancia_media==null?"\u2014":`${num(r.estancia_media)} noches`,sub:`${num(r.confirmadas)} reservas`}),__gh(KPI,{label:"Antelaci\xF3n media",value:r.antelacion_media==null?"\u2014":`${num(Math.round(r.antelacion_media))} d\xEDas`,sub:"desde que reservan hasta que llegan"}),__gh(KPI,{label:"Entran al ritmo de",value:`${num(r.ritmo_7)} / semana`,sub:`${money0(r.ritmo_7_eur)} en los \xFAltimos 7 d\xEDas`,accent:B.accent}),__gh(KPI,{label:"Canceladas",value:num(r.canceladas),sub:r.confirmadas?`${pct(r.canceladas/(r.confirmadas+r.canceladas)*100)} de las hechas`:"\u2014",accent:r.canceladas?B.amber:B.green})):null}function Semanas({semanas,unidades,movil}){let completas=semanas.filter(s=>s.dias===7),mejor=completas.length>1?completas.reduce((a,b)=>b.ocupacion>a.ocupacion?b:a):null,peor=completas.length>1?completas.reduce((a,b)=>b.ocupacionmejor&&s.inicio===mejor.inicio?B.green:peor&&s.inicio===peor.inicio?B.red:B.ink;return semanas.length?__gh("div",{className:"b-card overflow-hidden mb-6","data-gufi-src":"informe.tsx:340"},__gh(SecTitle,{sub:"las semanas a medias van marcadas \u2014 comparar 3 d\xEDas con 7 no dice nada"},"Semana a semana"),movil?__gh("div",{className:"px-4 pb-4","data-gufi-src":"informe.tsx:343"},semanas.map(s=>__gh("div",{key:s.inicio,className:"b-row","data-gufi-src":"informe.tsx:345"},__gh("div",{className:"flex items-baseline justify-between gap-3 mb-2","data-gufi-src":"informe.tsx:346"},__gh("span",{className:"text-[13.5px] font-bold",style:{color:B.ink},"data-gufi-src":"informe.tsx:347"},fmtDate(s.desde)," \u2192 ",fmtDate(s.hasta),s.dias<7?" *":""),__gh("span",{className:"text-[15px] font-bold b-num",style:{color:tono(s)},"data-gufi-src":"informe.tsx:348"},pct(s.ocupacion))),__gh("div",{className:"rounded-lg h-1.5 mb-2.5 overflow-hidden",style:{background:"#f1ecec"},"data-gufi-src":"informe.tsx:350"},__gh("div",{style:{width:`${Math.min(100,s.ocupacion||0)}%`,height:"100%",background:B.grad},"data-gufi-src":"informe.tsx:351"})),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:353"},__gh("span",{"data-gufi-src":"informe.tsx:353"},"Camas al d\xEDa"),__gh("span",{"data-gufi-src":"informe.tsx:353"},num(Math.round(s.ocupadas/s.dias))," de ",num(unidades))),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:354"},__gh("span",{"data-gufi-src":"informe.tsx:354"},"Ingresos"),__gh("span",{"data-gufi-src":"informe.tsx:354"},money2(s.recaudacion))),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:355"},__gh("span",{"data-gufi-src":"informe.tsx:355"},"Precio por cama"),__gh("span",{"data-gufi-src":"informe.tsx:355"},s.adr==null?"\u2014":money2(s.adr)))))):__gh(TableWrap,{min:640},__gh("thead",{"data-gufi-src":"informe.tsx:361"},__gh("tr",{"data-gufi-src":"informe.tsx:361"},__gh(Th,null,"Semana"),__gh(Th,{r:!0},"Ocupaci\xF3n"),__gh(Th,{r:!0},"Camas / d\xEDa"),__gh(Th,{r:!0},"Ingresos"),__gh(Th,{r:!0},"\u20AC / cama"))),__gh("tbody",{"data-gufi-src":"informe.tsx:362"},semanas.map(s=>__gh("tr",{key:s.inicio,"data-gufi-src":"informe.tsx:364"},__gh(Td,{b:!0},fmtDate(s.desde)," \u2192 ",fmtDate(s.hasta),s.dias<7?__gh("span",{style:{color:B.faint,fontWeight:400},"data-gufi-src":"informe.tsx:365"}," \xB7 ",s.dias," d\xEDas"):null),__gh(Td,{r:!0},__gh("span",{className:"font-bold",style:{color:tono(s)},"data-gufi-src":"informe.tsx:366"},pct(s.ocupacion))),__gh(Td,{r:!0},num(Math.round(s.ocupadas/s.dias))," ",__gh("span",{style:{color:B.faint},"data-gufi-src":"informe.tsx:367"},"/ ",num(unidades))),__gh(Td,{r:!0,b:!0},money2(s.recaudacion)),__gh(Td,{r:!0},s.adr==null?"\u2014":money2(s.adr))))))):__gh("div",{className:"b-card mb-6","data-gufi-src":"informe.tsx:338"},__gh(Empty,{text:"Sin semanas todav\xEDa."}))}function Futuro({fut,unidades,hoy,movil}){let meses=fut&&fut.meses||[],proximos=(fut&&fut.dias||[]).filter(d2=>d2.fecha>hoy).slice(0,7);return meses.length?__gh(__gf,null,__gh("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-3 mb-4","data-gufi-src":"informe.tsx:386"},meses.map((m,k)=>__gh("div",{key:m.mes,className:"b-card p-3.5","data-gufi-src":"informe.tsx:388"},__gh("div",{className:"text-[10.5px] font-bold uppercase tracking-wide truncate",style:{color:B.faint},"data-gufi-src":"informe.tsx:389"},k===0&&m.dias0?B.accent:B.faint,letterSpacing:"-.5px"},"data-gufi-src":"informe.tsx:392"},pct(m.ocupacion)),__gh("div",{className:"rounded-lg h-1.5 mt-2 overflow-hidden",style:{background:"#f1ecec"},"data-gufi-src":"informe.tsx:393"},__gh("div",{style:{width:`${Math.min(100,m.ocupacion||0)}%`,height:"100%",background:B.grad},"data-gufi-src":"informe.tsx:394"})),__gh("div",{className:"text-[11px] mt-1.5",style:{color:B.faint},"data-gufi-src":"informe.tsx:396"},num(m.ocupadas)," de ",num(m.noches_disponibles)," camas-noche"),__gh("div",{className:"text-[13px] font-bold mt-0.5 b-num",style:{color:B.ink},"data-gufi-src":"informe.tsx:397"},money0(m.recaudacion))))),proximos.length?__gh("div",{className:"b-card overflow-hidden mb-6","data-gufi-src":"informe.tsx:402"},__gh(SecTitle,{sub:"lo que ya est\xE1 vendido para los pr\xF3ximos siete d\xEDas"},"Pr\xF3ximos d\xEDas"),movil?__gh("div",{className:"px-4 pb-4","data-gufi-src":"informe.tsx:405"},proximos.map(d2=>{let p=unidades?d2.ocupadas/unidades*100:null;return __gh("div",{key:d2.fecha,className:"b-row","data-gufi-src":"informe.tsx:407"},__gh("div",{className:"flex items-baseline justify-between gap-3","data-gufi-src":"informe.tsx:408"},__gh("span",{className:"text-[13.5px] font-bold capitalize",style:{color:B.ink},"data-gufi-src":"informe.tsx:409"},fmtDia(d2.fecha)),__gh("span",{className:"text-[14px] font-bold b-num",style:{color:p>0?B.accent:B.faint},"data-gufi-src":"informe.tsx:410"},pct(p))),__gh("div",{className:"b-kv mt-1.5","data-gufi-src":"informe.tsx:412"},__gh("span",{"data-gufi-src":"informe.tsx:412"},"Camas"),__gh("span",{"data-gufi-src":"informe.tsx:412"},num(d2.ocupadas)," de ",num(unidades))),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:413"},__gh("span",{"data-gufi-src":"informe.tsx:413"},"Ingresos"),__gh("span",{"data-gufi-src":"informe.tsx:413"},money2(d2.recaudacion))))})):__gh(TableWrap,{min:560},__gh("thead",{"data-gufi-src":"informe.tsx:419"},__gh("tr",{"data-gufi-src":"informe.tsx:419"},__gh(Th,null,"D\xEDa"),__gh(Th,{r:!0},"Ocupaci\xF3n"),__gh(Th,{r:!0},"Camas"),__gh(Th,{r:!0},"Ingresos"),__gh(Th,{r:!0},"\u20AC / cama"))),__gh("tbody",{"data-gufi-src":"informe.tsx:420"},proximos.map(d2=>{let p=unidades?d2.ocupadas/unidades*100:null;return __gh("tr",{key:d2.fecha,"data-gufi-src":"informe.tsx:422"},__gh(Td,{b:!0},__gh("span",{className:"capitalize","data-gufi-src":"informe.tsx:423"},fmtDia(d2.fecha))),__gh(Td,{r:!0},__gh("span",{className:"font-bold",style:{color:p>0?B.accent:B.faint},"data-gufi-src":"informe.tsx:424"},pct(p))),__gh(Td,{r:!0},num(d2.ocupadas)," ",__gh("span",{style:{color:B.faint},"data-gufi-src":"informe.tsx:425"},"/ ",num(unidades))),__gh(Td,{r:!0,b:!0},money2(d2.recaudacion)),__gh(Td,{r:!0},d2.ocupadas?money2(d2.recaudacion/d2.ocupadas):"\u2014"))})))):null):__gh("div",{className:"b-card mb-6","data-gufi-src":"informe.tsx:383"},__gh(Empty,{text:"No hay reservas futuras."}))}function agrupaHabitaciones(unidades,dias){if(!unidades.length)return null;let porHab=unidades.filter(x=>habitacionDe(x.nickname)).length===unidades.length&&unidades.length>1,m={};unidades.forEach(x=>{let k=porHab?habitacionDe(x.nickname):unidadDe(x.nickname);m[k]||(m[k]={clave:k,nombre:x.nombre_publico,tipo:porHab?tipoDe(k):null,unidades:0,ocupadas:0,recaudacion:0,tuyo:0}),m[k].unidades++,m[k].ocupadas+=x.ocupadas,m[k].recaudacion+=x.recaudacion,m[k].tuyo+=x.tuyo});let filas=Object.values(m).map(g=>({...g,ocupacion:g.unidades&&dias?g.ocupadas/(g.unidades*dias)*100:null})).sort((a,b)=>b.recaudacion-a.recaudacion);return{porHab,filas}}function Habitaciones({unidades,dias,total,movil}){let g=(0,import_react11.useMemo)(()=>agrupaHabitaciones(unidades,dias),[unidades,dias]),tipos=(0,import_react11.useMemo)(()=>{if(!g||!g.porHab)return null;let m={};g.filas.forEach(f=>{f.tipo&&(m[f.tipo]||(m[f.tipo]={tipo:f.tipo,camas:0,recaudacion:0,habs:[]}),m[f.tipo].camas+=f.unidades,m[f.tipo].recaudacion+=f.recaudacion,m[f.tipo].habs.push(f.clave))});let vals=Object.values(m);return vals.length>1?vals.sort((a,b)=>b.recaudacion-a.recaudacion):null},[g]);if(!g||g.filas.length<2)return null;let camas=g.filas.reduce((a,f)=>a+f.unidades,0);return __gh(__gf,null,tipos?__gh("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3 mb-4","data-gufi-src":"informe.tsx:471"},tipos.map(x=>__gh("div",{key:x.tipo,className:"b-card p-4","data-gufi-src":"informe.tsx:473"},__gh("div",{className:"text-[11px] font-bold uppercase tracking-wide",style:{color:B.faint},"data-gufi-src":"informe.tsx:474"},x.tipo),__gh("div",{className:"mt-1 text-2xl font-bold leading-none b-num",style:{color:B.ink,letterSpacing:"-.5px"},"data-gufi-src":"informe.tsx:475"},num(x.camas)," camas"),__gh("div",{className:"text-[11.5px] mt-1",style:{color:B.faint},"data-gufi-src":"informe.tsx:476"},x.habs.join(" + ")," \xB7 ",pct(camas?x.camas/camas*100:null)," de la casa"),__gh("div",{className:"rounded-lg h-1.5 mt-2.5 overflow-hidden",style:{background:"#f1ecec"},"data-gufi-src":"informe.tsx:477"},__gh("div",{style:{width:`${total?Math.min(100,x.recaudacion/total*100):0}%`,height:"100%",background:B.grad},"data-gufi-src":"informe.tsx:478"})),__gh("div",{className:"text-[12.5px] mt-1.5",style:{color:B.muted},"data-gufi-src":"informe.tsx:480"},"aporta ",__gh("b",{style:{color:B.ink},"data-gufi-src":"informe.tsx:481"},money0(x.recaudacion))," \xB7 ",pct(total?x.recaudacion/total*100:null)," del ingreso")))):null,__gh("div",{className:"b-card overflow-hidden mb-6","data-gufi-src":"informe.tsx:487"},__gh(SecTitle,{sub:g.porHab?"noches vendidas e ingresos de cada habitaci\xF3n, no solo su capacidad":"una fila por unidad"},g.porHab?"Aportaci\xF3n real por habitaci\xF3n":"Aportaci\xF3n por propiedad"),movil?__gh("div",{className:"px-4 pb-4","data-gufi-src":"informe.tsx:492"},g.filas.map(f=>__gh("div",{key:f.clave,className:"b-row","data-gufi-src":"informe.tsx:494"},__gh("div",{className:"flex items-baseline justify-between gap-3 mb-2","data-gufi-src":"informe.tsx:495"},__gh("span",{className:"text-[14px] font-bold",style:{color:B.ink},"data-gufi-src":"informe.tsx:496"},f.clave),__gh("span",{className:"text-[14px] font-bold b-num",style:{color:B.accent},"data-gufi-src":"informe.tsx:497"},money0(f.recaudacion))),__gh("div",{className:"rounded-lg h-1.5 mb-2.5 overflow-hidden",style:{background:"#f1ecec"},"data-gufi-src":"informe.tsx:499"},__gh("div",{style:{width:`${total?Math.min(100,f.recaudacion/total*100):0}%`,height:"100%",background:B.grad},"data-gufi-src":"informe.tsx:500"})),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:502"},__gh("span",{"data-gufi-src":"informe.tsx:502"},"Aporta"),__gh("span",{"data-gufi-src":"informe.tsx:502"},pct(total?f.recaudacion/total*100:null))),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:503"},__gh("span",{"data-gufi-src":"informe.tsx:503"},"Camas"),__gh("span",{"data-gufi-src":"informe.tsx:503"},num(f.unidades))),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:504"},__gh("span",{"data-gufi-src":"informe.tsx:504"},"Noches vendidas"),__gh("span",{"data-gufi-src":"informe.tsx:504"},num(f.ocupadas))),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:505"},__gh("span",{"data-gufi-src":"informe.tsx:505"},"Ocupaci\xF3n"),__gh("span",{"data-gufi-src":"informe.tsx:505"},pct(f.ocupacion)))))):__gh(TableWrap,{min:720},__gh("thead",{"data-gufi-src":"informe.tsx:511"},__gh("tr",{"data-gufi-src":"informe.tsx:511"},__gh(Th,null,g.porHab?"Habitaci\xF3n":"Propiedad"),__gh(Th,{r:!0},"Camas"),__gh(Th,{r:!0},"Noches"),__gh(Th,{r:!0},"Ocupaci\xF3n"),__gh(Th,{r:!0},"Ingresos"),__gh(Th,null,"Aporta al total"))),__gh("tbody",{"data-gufi-src":"informe.tsx:512"},g.filas.map(f=>__gh("tr",{key:f.clave,"data-gufi-src":"informe.tsx:514"},__gh(Td,{b:!0},f.clave,f.nombre?__gh("div",{className:"text-[11.5px] font-normal",style:{color:B.faint},"data-gufi-src":"informe.tsx:515"},f.nombre):null),__gh(Td,{r:!0},num(f.unidades)),__gh(Td,{r:!0},num(f.ocupadas)),__gh(Td,{r:!0},pct(f.ocupacion)),__gh(Td,{r:!0,b:!0},money2(f.recaudacion)),__gh(Td,null,__gh("div",{className:"flex items-center gap-2","data-gufi-src":"informe.tsx:521"},__gh("div",{className:"rounded-full h-1.5 flex-1 overflow-hidden",style:{background:"#f1ecec",minWidth:80},"data-gufi-src":"informe.tsx:522"},__gh("div",{style:{width:`${total?Math.min(100,f.recaudacion/total*100):0}%`,height:"100%",background:B.grad},"data-gufi-src":"informe.tsx:523"})),__gh("span",{className:"b-num font-semibold",style:{color:B.accent,width:52,textAlign:"right"},"data-gufi-src":"informe.tsx:525"},pct(total?f.recaudacion/total*100:null))))))))))}function PatronSemanal({dow,unidades,movil}){let filas=(0,import_react11.useMemo)(()=>dow.map(d2=>({...d2,ingresoDia:d2.dias?d2.recaudacion/d2.dias:0,camasDia:d2.dias?d2.ocupadas/d2.dias:0})),[dow]);if(filas.length<7)return null;let finde=filas.filter(d2=>d2.dow===5||d2.dow===6),resto=filas.filter(d2=>d2.dow!==5&&d2.dow!==6),media=(arr,campo)=>arr.length?arr.reduce((a,x)=>a+x[campo],0)/arr.length:0,ocupFinde=media(finde,"ocupacion"),ocupResto=media(resto,"ocupacion"),eurFinde=media(finde,"ingresoDia"),eurResto=media(resto,"ingresoDia"),dif=eurResto?(eurFinde-eurResto)/eurResto*100:null,flojo=filas.slice().sort((a,b)=>a.ocupacion-b.ocupacion).slice(0,2).sort((a,b)=>a.dow-b.dow),max=Math.max(1,...filas.map(d2=>d2.ocupacion||0));return __gh(__gf,null,__gh("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-4","data-gufi-src":"informe.tsx:551"},__gh(KPI,{label:"Viernes + s\xE1bado",value:pct(ocupFinde),sub:`${money0(eurFinde)} al d\xEDa`,accent:B.green}),__gh(KPI,{label:"Resto de d\xEDas",value:pct(ocupResto),sub:`${money0(eurResto)} al d\xEDa`}),__gh(KPI,{label:"Diferencia",value:dif==null?"\u2014":`${dif>0?"+":""}${Math.round(dif)} %`,sub:"ingresos del finde sobre el resto",accent:dif>0?B.green:B.muted}),__gh(KPI,{label:"Punto d\xE9bil",value:flojo.map(d2=>DOW[d2.dow].slice(0,3)).join(" + "),sub:`${pct(media(flojo,"ocupacion"))} de ocupaci\xF3n`,accent:B.amber})),__gh("div",{className:"b-card overflow-hidden mb-6","data-gufi-src":"informe.tsx:557"},__gh(SecTitle,{sub:"media de cada d\xEDa de la semana desde apertura"},"Qu\xE9 d\xEDa funciona"),movil?__gh("div",{className:"px-4 pb-4","data-gufi-src":"informe.tsx:560"},filas.map(d2=>__gh("div",{key:d2.dow,className:"b-row","data-gufi-src":"informe.tsx:562"},__gh("div",{className:"flex items-baseline justify-between gap-3 mb-2","data-gufi-src":"informe.tsx:563"},__gh("span",{className:"text-[14px] font-bold",style:{color:d2.dow>=5&&d2.dow<=6?B.green:B.ink},"data-gufi-src":"informe.tsx:564"},DOW[d2.dow]),__gh("span",{className:"text-[14px] font-bold b-num",style:{color:B.accent},"data-gufi-src":"informe.tsx:565"},pct(d2.ocupacion))),__gh("div",{className:"rounded-lg h-1.5 mb-2.5 overflow-hidden",style:{background:"#f1ecec"},"data-gufi-src":"informe.tsx:567"},__gh("div",{style:{width:`${(d2.ocupacion||0)/max*100}%`,height:"100%",background:B.grad},"data-gufi-src":"informe.tsx:568"})),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:570"},__gh("span",{"data-gufi-src":"informe.tsx:570"},"Camas al d\xEDa"),__gh("span",{"data-gufi-src":"informe.tsx:570"},num(Math.round(d2.camasDia))," de ",num(unidades))),__gh("div",{className:"b-kv","data-gufi-src":"informe.tsx:571"},__gh("span",{"data-gufi-src":"informe.tsx:571"},"Ingresos al d\xEDa"),__gh("span",{"data-gufi-src":"informe.tsx:571"},money2(d2.ingresoDia)))))):__gh(TableWrap,{min:560},__gh("thead",{"data-gufi-src":"informe.tsx:577"},__gh("tr",{"data-gufi-src":"informe.tsx:577"},__gh(Th,null,"D\xEDa"),__gh(Th,{r:!0},"Ocupaci\xF3n"),__gh(Th,null,"\xA0"),__gh(Th,{r:!0},"Camas / d\xEDa"),__gh(Th,{r:!0},"Ingresos / d\xEDa"))),__gh("tbody",{"data-gufi-src":"informe.tsx:578"},filas.map(d2=>__gh("tr",{key:d2.dow,"data-gufi-src":"informe.tsx:580"},__gh(Td,{b:!0},__gh("span",{style:{color:d2.dow>=5&&d2.dow<=6?B.green:B.ink},"data-gufi-src":"informe.tsx:581"},DOW[d2.dow])),__gh(Td,{r:!0},__gh("span",{className:"font-bold",style:{color:B.accent},"data-gufi-src":"informe.tsx:582"},pct(d2.ocupacion))),__gh(Td,null,__gh("div",{className:"rounded-full h-1.5 overflow-hidden",style:{background:"#f1ecec",minWidth:120},"data-gufi-src":"informe.tsx:584"},__gh("div",{style:{width:`${(d2.ocupacion||0)/max*100}%`,height:"100%",background:B.grad},"data-gufi-src":"informe.tsx:585"}))),__gh(Td,{r:!0},num(Math.round(d2.camasDia))," ",__gh("span",{style:{color:B.faint},"data-gufi-src":"informe.tsx:588"},"/ ",num(unidades))),__gh(Td,{r:!0,b:!0},money2(d2.ingresoDia))))))))}function Lectura({hist,fut,unidades,hoy}){let puntos=[],completas=(hist.semanas||[]).filter(s=>s.dias===7);if(completas.length>=2){let a=completas[0],z=completas[completas.length-1],sube=z.ocupacion>a.ocupacion;puntos.push({t:sube?"La casa se est\xE1 llenando":"La ocupaci\xF3n est\xE1 bajando",d:`De ${pct(a.ocupacion)} en la semana del ${fmtDate(a.desde)} a ${pct(z.ocupacion)} en la del ${fmtDate(z.desde)}.`,c:sube?B.green:B.amber})}let dow=hist.dow||[];if(dow.length===7){let finde=dow.filter(d2=>d2.dow===5||d2.dow===6),resto=dow.filter(d2=>d2.dow!==5&&d2.dow!==6),m=arr=>arr.length?arr.reduce((s,x)=>s+(x.dias?x.recaudacion/x.dias:0),0)/arr.length:0,ef=m(finde),er=m(resto);er>0&&puntos.push({t:ef>er?"El fin de semana es lo que tira":"Entre semana se vende igual o mejor",d:`Viernes y s\xE1bado dejan ${money0(ef)} al d\xEDa frente a ${money0(er)} del resto${ef>er?` \u2014 un ${Math.round((ef-er)/er*100)} % m\xE1s`:""}.`,c:B.accent})}let ant=hist.perfil&&hist.perfil.antelacion||[],ultima=ant.find(x=>x.orden===1),totalAnt=ant.reduce((a,x)=>a+x.n,0);if(ultima&&totalAnt){let p=ultima.n/totalAnt*100;p>=20&&puntos.push({t:"Se reserva a \xFAltima hora",d:`${pct(p)} de las reservas entra el mismo d\xEDa o la v\xEDspera (${num(ultima.n)} de ${num(totalAnt)}). Los meses que hoy parecen vac\xEDos se llenan en la \xFAltima semana.`,c:B.accent})}let futuros=(fut&&fut.meses||[]).filter(m=>m.mes>hoy.slice(0,7));if(futuros.length){let flojo=futuros.reduce((a,b)=>b.ocupacionb.ocupacion>a.ocupacion?b:a);puntos.push({t:"D\xF3nde queda hueco por vender",d:`${mesLabel(fuerte.mes)} va al ${pct(fuerte.ocupacion)} y ${mesLabel(flojo.mes)} al ${pct(flojo.ocupacion)}. Lo vendido de aqu\xED a fin de a\xF1o suma ${money0(futuros.reduce((s,m)=>s+m.recaudacion,0))}.`,c:B.amber})}return puntos.length?__gh("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3 mb-8","data-gufi-src":"informe.tsx:649"},puntos.map((p,k)=>__gh("div",{key:k,className:"b-card p-4",style:{borderLeft:`3px solid ${p.c}`},"data-gufi-src":"informe.tsx:651"},__gh("div",{className:"text-[14px] font-bold mb-1",style:{color:p.c},"data-gufi-src":"informe.tsx:652"},p.t),__gh("div",{className:"text-[12.5px]",style:{color:B.sub,lineHeight:1.55},"data-gufi-src":"informe.tsx:653"},p.d)))):null}var NoConectado=()=>__gh("div",{className:"rounded-xl px-4 py-3 flex items-start gap-3",style:{background:"#faf7f7",boxShadow:`inset 0 0 0 1px ${B.hair}`},"data-gufi-src":"informe.tsx:663"},__gh(import_lucide_react11.Info,{size:16,style:{color:B.faint,flexShrink:0,marginTop:2}}),__gh("div",{className:"text-[12.5px]",style:{color:B.muted,lineHeight:1.6},"data-gufi-src":"informe.tsx:665"},"Dos cosas de tu informe en PDF no salen aqu\xED, y no es un olvido: los ",__gh("b",{style:{color:B.sub},"data-gufi-src":"informe.tsx:666"},"cobros del TPV")," no entran en Gufi por ning\xFAn sitio, y la ",__gh("b",{style:{color:B.sub},"data-gufi-src":"informe.tsx:667"},"comparaci\xF3n con otros hostels")," de Hostelworld es un vistazo a mano a fichas ajenas. Si el TPV llega a volcar sus ventas, esta pantalla las suma sola. Mientras tanto, no se inventan."));var import_react12=require("react"),import_lucide_react12=require("lucide-react");var MEDIO_COLOR={TPV:"#0f766e",Efectivo:"#a16207",Bizum:"#0e7490",Transferencia:"#4338ca",Otro:"#6b7280"},hoyISO=()=>new Date().toISOString().slice(0,10),canalEstancia=e=>canalDe(e.canal,String(e.codigo).startsWith("HWG-"));function sumar(estancias,medios){let c={estancias:estancias.length,facturado:0,base:0,sin_factura:0,sin_factura_importe:0,canal:0,neto:0,comision:0,recepcion:{},recepcion_total:0,pendiente:0,de_mas:0,diferencia:0,canal_sin_pagar:0,directas:0,pendientes:0};return medios.forEach(m=>{c.recepcion[m]=0}),estancias.forEach(e=>{c.base+=e.base,e.facturado!=null?c.facturado+=e.facturado:(c.sin_factura+=1,c.sin_factura_importe+=e.base),c.canal+=e.canal_bruto,c.neto+=e.canal_neto,c.comision+=e.comision,e.recepcion.forEach(r=>{c.recepcion[r.medio]=(c.recepcion[r.medio]||0)+r.importe}),c.recepcion_total+=e.recepcion_total,c.pendiente+=e.pendiente,c.de_mas+=e.de_mas,e.pendiente>0&&(c.pendientes+=1,e.canal_bruto+e.recepcion_total>0?c.diferencia+=e.pendiente:e.canal==="Direct"?c.directas+=e.pendiente:c.canal_sin_pagar+=e.pendiente)}),c}function Cascada({c,medios}){let total=c.base||1,tramos=[{k:"canal",t:"Pagado por el canal",v:c.canal,color:"#1e3a8a",s:c.comision?`${money2(c.neto)} en el banco + ${money2(c.comision)} de comisi\xF3n`:"lo que ha llegado al banco"},...medios.map(m=>({k:m,t:m==="TPV"?"TPV del hostal":m,v:c.recepcion[m],color:MEDIO_COLOR[m],s:"apuntado en recepci\xF3n"})).filter(x=>x.v>0),{k:"pend",t:"Pendiente de localizar",v:c.pendiente,color:"#d4d4d8",s:"no es \xABsin cobrar\xBB: es lo que Gufi no ve"}];return __gh("div",{className:"b-card p-4 sm:p-5 mb-5","data-gufi-src":"cobros.tsx:53"},__gh("div",{className:"flex flex-wrap items-baseline gap-x-6 gap-y-1 mb-3","data-gufi-src":"cobros.tsx:54"},__gh("div",{"data-gufi-src":"cobros.tsx:55"},__gh("span",{className:"text-[12px] font-semibold uppercase tracking-[.06em]",style:{color:B.faint},"data-gufi-src":"cobros.tsx:55"},"Facturado"),__gh("div",{className:"text-[28px] font-semibold b-num",style:{color:B.ink,letterSpacing:"-.03em"},"data-gufi-src":"cobros.tsx:56"},money2(c.base))),__gh("div",{className:"text-[12.5px]",style:{color:B.muted},"data-gufi-src":"cobros.tsx:57"},num(c.estancias)," estancias",c.sin_factura?` \xB7 ${num(c.sin_factura)} a\xFAn sin factura (cuentan por su reserva, ${money2(c.sin_factura_importe)})`:"")),__gh("div",{style:{display:"flex",height:14,borderRadius:999,overflow:"hidden",background:"#f0f0f2"},"data-gufi-src":"cobros.tsx:59"},tramos.map(x=>x.v>0?__gh("div",{key:x.k,title:`${x.t}: ${money2(x.v)}`,style:{width:`${x.v/total*100}%`,background:x.color},"data-gufi-src":"cobros.tsx:60"}):null)),__gh("div",{className:"mt-3","data-gufi-src":"cobros.tsx:62"},tramos.map(x=>__gh("div",{key:x.k,style:{display:"grid",gridTemplateColumns:"12px minmax(0,1fr) auto auto",gap:10,alignItems:"baseline",padding:"7px 0",borderBottom:"1px solid #f0f0f2"},"data-gufi-src":"cobros.tsx:64"},__gh("span",{className:"p-dot",style:{background:x.color,transform:"translateY(1px)"},"data-gufi-src":"cobros.tsx:65"}),__gh("span",{style:{minWidth:0},"data-gufi-src":"cobros.tsx:66"},__gh("span",{className:"text-[13.5px]",style:{color:B.ink,fontWeight:600},"data-gufi-src":"cobros.tsx:66"},x.t)," ",__gh("span",{className:"text-[12px]",style:{color:B.faint},"data-gufi-src":"cobros.tsx:66"},x.s)),__gh("span",{className:"text-[12px] b-num",style:{color:B.muted},"data-gufi-src":"cobros.tsx:67"},pct(x.v/total*100)),__gh("span",{className:"text-[14px] b-num",style:{color:B.ink,fontWeight:600,minWidth:96,textAlign:"right"},"data-gufi-src":"cobros.tsx:68"},money2(x.v))))),c.pendiente>0?__gh("div",{className:"mt-3 rounded-xl px-3.5 py-3 text-[12.5px]",style:{background:"#fafafa",border:`1px solid ${B.hair}`,color:B.muted,lineHeight:1.6},"data-gufi-src":"cobros.tsx:73"},__gh("b",{style:{color:B.sub},"data-gufi-src":"cobros.tsx:74"},"Qu\xE9 hay en lo pendiente:"),__gh("div",{"data-gufi-src":"cobros.tsx:75"},"\xB7 ",__gh("b",{style:{color:B.ink},"data-gufi-src":"cobros.tsx:75"},money2(c.directas))," en directas sin ning\xFAn cobro apuntado \u2014 se cobran en recepci\xF3n: ap\xFAntalas abajo."),__gh("div",{"data-gufi-src":"cobros.tsx:76"},"\xB7 ",__gh("b",{style:{color:B.ink},"data-gufi-src":"cobros.tsx:76"},money2(c.canal_sin_pagar))," en estancias de Booking o Hostelworld de las que a\xFAn no ha llegado el pago."),__gh("div",{"data-gufi-src":"cobros.tsx:77"},"\xB7 ",__gh("b",{style:{color:B.ink},"data-gufi-src":"cobros.tsx:77"},money2(c.diferencia))," de diferencia en estancias que el canal ya pag\xF3 por menos: casi siempre la comisi\xF3n de Hostelworld, que su informe no trae, o un resto cobrado en recepci\xF3n."),c.de_mas>0?__gh("div",{style:{marginTop:4},"data-gufi-src":"cobros.tsx:78"},"Y hay ",money2(c.de_mas)," localizados de m\xE1s que lo facturado (cobros que superan la factura de su estancia)."):null):null)}function Apuntar({api,token,estancias,medios,onHecho,onClose}){let una=estancias.length===1?estancias[0]:null,[medio,setMedio]=(0,import_react12.useState)("TPV"),[fecha,setFecha]=(0,import_react12.useState)(hoyISO()),[importe,setImporte]=(0,import_react12.useState)(una?String(una.pendiente).replace(".",","):""),[numOp,setNumOp]=(0,import_react12.useState)(""),[notas,setNotas]=(0,import_react12.useState)(""),[estado,setEstado]=(0,import_react12.useState)({ocupado:!1,error:""}),total=estancias.reduce((s,e)=>s+e.pendiente,0);async function guardar(){setEstado({ocupado:!0,error:""});try{let txt=String(importe).trim(),imp=una?parseFloat(txt.includes(",")?txt.replace(/\./g,"").replace(",","."):txt):null;if(una&&!(imp>0))throw new Error("Pon el importe cobrado.");await api("portal_cobros",{token,accion:"apuntar",codigos:estancias.map(e=>e.codigo),medio,fecha,num_operacion:numOp,notas,importe:una?imp:null}),onHecho()}catch(e){setEstado({ocupado:!1,error:String(e&&e.message||e)})}}return __gh(Hoja,{titulo:una?"Apuntar cobro":`Apuntar cobro de ${num(estancias.length)} estancias`,sub:una?`${una.huesped||una.codigo} \xB7 entrada ${fmtLarga(una.entrada)}`:`Se apunta a cada una lo que le falta: ${money2(total)} en total`,onClose,pie:__gh("div",{style:{display:"flex",alignItems:"center",gap:10},"data-gufi-src":"cobros.tsx:111"},estado.error?__gh("span",{style:{fontSize:12.5,color:B.red,flex:1},"data-gufi-src":"cobros.tsx:112"},estado.error):__gh("span",{style:{flex:1},"data-gufi-src":"cobros.tsx:112"}),__gh("button",{className:"p-btn",onClick:onClose,"data-gufi-src":"cobros.tsx:113"},"Cancelar"),__gh("button",{className:"p-btn p-btn-a",onClick:guardar,disabled:estado.ocupado,"data-gufi-src":"cobros.tsx:114"},estado.ocupado?__gh(import_lucide_react12.Loader2,{size:15,className:"animate-spin"}):null,"Guardar cobro"))},__gh("div",{className:"p-sec",style:{marginTop:0},"data-gufi-src":"cobros.tsx:117"},"C\xF3mo se cobr\xF3"),__gh("div",{className:"p-seg",style:{flexWrap:"wrap"},"data-gufi-src":"cobros.tsx:118"},medios.map(m=>__gh("button",{key:m,"data-on":medio===m?"1":"0",onClick:()=>setMedio(m),"data-gufi-src":"cobros.tsx:119"},m))),__gh("div",{className:"p-sec","data-gufi-src":"cobros.tsx:121"},"Fecha del cobro"),__gh("input",{type:"date",className:"b-input",value:fecha,max:hoyISO(),onChange:e=>setFecha(e.target.value),"data-gufi-src":"cobros.tsx:122"}),una?__gh(__gf,null,__gh("div",{className:"p-sec","data-gufi-src":"cobros.tsx:125"},"Importe"),__gh("input",{className:"b-input",inputMode:"decimal",value:importe,onChange:e=>setImporte(e.target.value),"data-gufi-src":"cobros.tsx:126"}),__gh("div",{className:"p-note",style:{marginTop:6},"data-gufi-src":"cobros.tsx:127"},"Le faltaban ",money2(una.pendiente)," de ",money2(una.base),".")):null,__gh("div",{className:"p-sec","data-gufi-src":"cobros.tsx:130"},"N\xBA de operaci\xF3n ",__gh("span",{style:{textTransform:"none",letterSpacing:0,fontWeight:400},"data-gufi-src":"cobros.tsx:130"},"(opcional, el del ticket del TPV)")),__gh("input",{className:"b-input",value:numOp,onChange:e=>setNumOp(e.target.value),"data-gufi-src":"cobros.tsx:131"}),__gh("div",{className:"p-sec","data-gufi-src":"cobros.tsx:132"},"Notas ",__gh("span",{style:{textTransform:"none",letterSpacing:0,fontWeight:400},"data-gufi-src":"cobros.tsx:132"},"(opcional)")),__gh("input",{className:"b-input",value:notas,onChange:e=>setNotas(e.target.value),"data-gufi-src":"cobros.tsx:133"}),una?null:__gh("div",{style:{marginTop:16,maxHeight:220,overflowY:"auto"},"data-gufi-src":"cobros.tsx:135"},estancias.map(e=>__gh("div",{key:e.codigo,className:"p-kv","data-gufi-src":"cobros.tsx:136"},__gh("span",{"data-gufi-src":"cobros.tsx:136"},e.huesped||e.codigo," \xB7 ",fmtLarga(e.entrada)),__gh("span",{"data-gufi-src":"cobros.tsx:136"},money2(e.pendiente))))))}function Recorrido({api,token,e,onApuntar,onBorrado,onClose}){let[borrando,setBorrando]=(0,import_react12.useState)(null),[error,setError]=(0,import_react12.useState)("");async function pdf(f){setError("");try{let r=await api("portal_factura_pdf",{token,facturaId:f.id});descargarPdfBase64(r.pdf,r.filename)}catch(x){setError(String(x&&x.message||x))}}async function borrar(c){if(borrando!==c.id){setBorrando(c.id);return}setError("");try{await api("portal_cobros",{token,accion:"borrar",id:c.id}),onBorrado()}catch(x){setError(String(x&&x.message||x)),setBorrando(null)}}let canal=canalEstancia(e);return __gh(Hoja,{titulo:e.huesped||e.codigo,sub:`${canal} \xB7 ${e.codigo} \xB7 ${fmtLarga(e.entrada)} \u2192 ${fmtLarga(e.salida)} \xB7 ${num(e.camas)} ${e.camas===1?"cama":"camas"}`,onClose,pie:e.pendiente>0?__gh("button",{className:"p-btn p-btn-a",style:{width:"100%"},onClick:onApuntar,"data-gufi-src":"cobros.tsx:161"},__gh(import_lucide_react12.Plus,{size:15}),"Apuntar cobro de ",money2(e.pendiente)):null},error?__gh("div",{className:"p-note",style:{color:B.red,marginBottom:8},"data-gufi-src":"cobros.tsx:162"},error):null,__gh("div",{className:"p-sec",style:{marginTop:0},"data-gufi-src":"cobros.tsx:163"},"1 \xB7 Factura"),e.facturas.length?e.facturas.map(f=>__gh("div",{key:f.id,className:"p-kv","data-gufi-src":"cobros.tsx:165"},__gh("span",{"data-gufi-src":"cobros.tsx:165"},__gh("button",{className:"p-btn p-btn-s",onClick:()=>pdf(f),"data-gufi-src":"cobros.tsx:165"},__gh(import_lucide_react12.FileText,{size:13}),f.numero)," ",__gh("span",{style:{marginLeft:6},"data-gufi-src":"cobros.tsx:165"},fmtLarga(f.fecha))),__gh("span",{"data-gufi-src":"cobros.tsx:165"},money2(f.total)))):__gh("div",{className:"p-kv","data-gufi-src":"cobros.tsx:166"},__gh("span",{"data-gufi-src":"cobros.tsx:166"},"Todav\xEDa sin factura"),__gh("span",{"data-gufi-src":"cobros.tsx:166"},"reserva ",money2(e.importe))),__gh("div",{className:"p-sec","data-gufi-src":"cobros.tsx:168"},"2 \xB7 Pagado por el canal"),e.canal_pagos.length?e.canal_pagos.map((p,k)=>__gh("div",{key:k,className:"p-kv","data-gufi-src":"cobros.tsx:170"},__gh("span",{"data-gufi-src":"cobros.tsx:171"},p.canal," \xB7 ",fmtLarga(p.fecha)," \xB7 cuenta \u2022\u2022\u2022\u2022",p.cuenta||"\u2014",p.bruto!=null?` \xB7 comisi\xF3n ${money2(p.bruto-p.neto)}`:""),__gh("span",{"data-gufi-src":"cobros.tsx:172"},money2(p.bruto!=null?p.bruto:p.neto)))):__gh("div",{className:"p-kv","data-gufi-src":"cobros.tsx:174"},__gh("span",{"data-gufi-src":"cobros.tsx:174"},e.canal==="Direct"?"Una directa no la paga ning\xFAn canal":"A\xFAn no ha llegado el pago del canal"),__gh("span",{"data-gufi-src":"cobros.tsx:174"},"\u2014")),__gh("div",{className:"p-sec","data-gufi-src":"cobros.tsx:176"},"3 \xB7 Cobrado en recepci\xF3n"),e.recepcion.length?e.recepcion.map(c=>__gh("div",{key:c.id,className:"p-kv","data-gufi-src":"cobros.tsx:178"},__gh("span",{"data-gufi-src":"cobros.tsx:179"},__gh("span",{style:{color:MEDIO_COLOR[c.medio],fontWeight:600},"data-gufi-src":"cobros.tsx:180"},c.medio)," \xB7 ",fmtLarga(c.fecha),c.num_operacion?` \xB7 op. ${c.num_operacion}`:"",c.notas?` \xB7 ${c.notas}`:"",__gh("button",{className:"p-btn p-btn-s",style:{marginLeft:8,height:24,color:borrando===c.id?B.red:B.muted},onClick:()=>borrar(c),"data-gufi-src":"cobros.tsx:181"},__gh(import_lucide_react12.Trash2,{size:12}),borrando===c.id?"Pulsa otra vez":"Quitar")),__gh("span",{"data-gufi-src":"cobros.tsx:183"},money2(c.importe)))):__gh("div",{className:"p-kv","data-gufi-src":"cobros.tsx:185"},__gh("span",{"data-gufi-src":"cobros.tsx:185"},"Nada apuntado"),__gh("span",{"data-gufi-src":"cobros.tsx:185"},"\u2014")),__gh("div",{className:"p-sec","data-gufi-src":"cobros.tsx:187"},"4 \xB7 Lo que queda"),__gh("div",{className:"p-kv","data-gufi-src":"cobros.tsx:188"},__gh("span",{"data-gufi-src":"cobros.tsx:188"},"Facturado"),__gh("span",{"data-gufi-src":"cobros.tsx:188"},money2(e.base))),__gh("div",{className:"p-kv","data-gufi-src":"cobros.tsx:189"},__gh("span",{"data-gufi-src":"cobros.tsx:189"},"Localizado (canal + recepci\xF3n)"),__gh("span",{"data-gufi-src":"cobros.tsx:189"},money2(e.canal_bruto+e.recepcion_total))),__gh("div",{className:"p-kv","data-gufi-src":"cobros.tsx:190"},__gh("span",{"data-gufi-src":"cobros.tsx:190"},"Pendiente de localizar"),__gh("span",{style:{color:e.pendiente>0?B.amber:B.green,fontWeight:600},"data-gufi-src":"cobros.tsx:190"},e.pendiente>0?money2(e.pendiente):"nada")),e.de_mas>0?__gh("div",{className:"p-kv","data-gufi-src":"cobros.tsx:191"},__gh("span",{"data-gufi-src":"cobros.tsx:191"},"Localizado de m\xE1s"),__gh("span",{style:{color:B.amber},"data-gufi-src":"cobros.tsx:191"},money2(e.de_mas))):null)}var FILTROS=[["todas","Todas"],["pendientes","Con algo pendiente"],["directas","Directas sin cobro"],["recepcion","Con cobro en recepci\xF3n"],["sin_factura","Sin factura"]];function Cobros({api,token,year,propiedadIds,ownerName}){let movil=useIsMobile(),[version,setVersion]=(0,import_react12.useState)(0),d2=useScript(api,"portal_cobros",{token,accion:"lista",desde:`${year}-01-01`,hasta:`${Number(year)+1}-01-01`,version},!0),[filtro,setFiltro]=(0,import_react12.useState)("todas"),[q,setQ]=(0,import_react12.useState)(""),[marcadas,setMarcadas]=(0,import_react12.useState)({}),[abierta,setAbierta]=(0,import_react12.useState)(null),[apuntar,setApuntar]=(0,import_react12.useState)(null),[cuantas,setCuantas]=(0,import_react12.useState)(200),[errorExport,setErrorExport]=(0,import_react12.useState)(""),medios=d2.datos&&d2.datos.medios||[],visibles=(0,import_react12.useMemo)(()=>{let todas=d2.datos&&d2.datos.estancias||[];if(!propiedadIds||!propiedadIds.length)return todas;let dentro=new Set(propiedadIds.map(Number));return todas.filter(e=>(e.unidades||[]).some(u=>dentro.has(Number(u))))},[d2.datos,propiedadIds]),c=(0,import_react12.useMemo)(()=>sumar(visibles,medios),[visibles,medios]),norm=s=>String(s||"").normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase(),filas=(0,import_react12.useMemo)(()=>{let n=norm(q);return visibles.filter(e=>filtro==="pendientes"&&!(e.pendiente>0)||filtro==="directas"&&!(e.canal==="Direct"&&e.pendiente>0&&!e.recepcion.length)||filtro==="recepcion"&&!e.recepcion.length||filtro==="sin_factura"&&e.facturado!=null?!1:!n||norm(`${e.huesped} ${e.codigo} ${e.facturas.map(f=>f.numero).join(" ")}`).includes(n))},[visibles,filtro,q]),elegidas=filas.filter(e=>marcadas[e.codigo]&&e.pendiente>0),recargar=()=>{setMarcadas({}),setApuntar(null),setVersion(v=>v+1)},abiertaViva=abierta?visibles.find(e=>e.codigo===abierta):null;async function exportar2(){setErrorExport("");try{await exportarTabla(`Cobros_${year}.xlsx`,"Cobros",`Recorrido de cobro \xB7 ${ownerName||""} \xB7 ${year}`,`Facturado ${money2(c.base)} \xB7 canal ${money2(c.canal)} \xB7 recepci\xF3n ${money2(c.recepcion_total)} \xB7 pendiente ${money2(c.pendiente)}`,[{t:"Entrada",w:12,fecha:!0},{t:"Salida",w:12,fecha:!0},{t:"Estancia",w:18},{t:"Hu\xE9sped",w:28},{t:"Canal",w:13},{t:"Camas",w:8,n:!0},{t:"Factura",w:16},{t:"Facturado",w:13,eur:!0},{t:"Pagado por el canal",w:16,eur:!0},{t:"Neto en banco",w:14,eur:!0},{t:"Comisi\xF3n",w:12,eur:!0},{t:"Pagos del canal",w:34},{t:"Cobrado en recepci\xF3n",w:16,eur:!0},{t:"Medios",w:30},{t:"Pendiente",w:12,eur:!0}],filas.map(e=>[e.entrada,e.salida,e.codigo,e.huesped||"",canalEstancia(e),e.camas,e.facturas.map(f=>f.numero).join(", "),e.base,e.canal_bruto,e.canal_neto,e.comision,e.canal_pagos.map(p=>`${p.canal} ${p.fecha} \u2022\u2022\u2022\u2022${p.cuenta}`).join(" | "),e.recepcion_total,e.recepcion.map(r=>`${r.medio} ${r.fecha}${r.num_operacion?" op "+r.num_operacion:""}`).join(" | "),e.pendiente]))}catch(e){setErrorExport(String(e&&e.message||e))}}return d2.error?__gh("div",{className:"b-card","data-gufi-src":"cobros.tsx:246"},__gh(Empty,{text:`No se han podido leer los cobros: ${d2.error}`})):d2.cargando?__gh(Spin,null):visibles.length?__gh("div",{className:"b-fade","data-gufi-src":"cobros.tsx:251"},__gh(Bloque,{titulo:"De lo facturado a lo cobrado",sub:`Estancias que ya han entrado en ${year}, por fecha de entrada`,icono:import_lucide_react12.Wallet}),__gh(Cascada,{c,medios}),__gh("div",{className:"flex flex-wrap items-center gap-2 mb-3","data-gufi-src":"cobros.tsx:255"},FILTROS.map(([k,l])=>__gh(FChip,{key:k,active:filtro===k,onClick:()=>{setFiltro(k),setCuantas(200)}},l))),__gh("div",{className:"flex flex-wrap items-center gap-2 mb-3","data-gufi-src":"cobros.tsx:258"},__gh("label",{className:"p-pill",style:{cursor:"text",flex:movil?"1 1 100%":"0 1 320px"},"data-gufi-src":"cobros.tsx:259"},__gh(import_lucide_react12.Search,{size:15,style:{color:B.faint}}),__gh("input",{value:q,onChange:ev=>setQ(ev.target.value),placeholder:"Hu\xE9sped, estancia o factura",style:{border:"none",outline:"none",background:"transparent",fontSize:13.5,flex:1,minWidth:0,color:B.ink},"data-gufi-src":"cobros.tsx:261"})),__gh("span",{style:{flex:1},"data-gufi-src":"cobros.tsx:263"}),elegidas.length?__gh("button",{className:"p-btn p-btn-a",onClick:()=>setApuntar(elegidas),"data-gufi-src":"cobros.tsx:264"},__gh(import_lucide_react12.Plus,{size:15}),"Apuntar cobro de ",num(elegidas.length)," (",money0(elegidas.reduce((s,e)=>s+e.pendiente,0)),")"):null,__gh("button",{className:"p-btn",onClick:exportar2,"data-gufi-src":"cobros.tsx:265"},__gh(import_lucide_react12.Download,{size:15}),"Excel")),errorExport?__gh("div",{className:"p-note",style:{color:B.red,marginBottom:8},"data-gufi-src":"cobros.tsx:267"},errorExport):null,__gh("div",{className:"b-card overflow-hidden","data-gufi-src":"cobros.tsx:269"},filas.length?__gh("div",{style:{overflowX:"auto"},"data-gufi-src":"cobros.tsx:271"},__gh("table",{className:"p-table",style:{minWidth:920},"data-gufi-src":"cobros.tsx:272"},__gh("thead",{"data-gufi-src":"cobros.tsx:273"},__gh("tr",{"data-gufi-src":"cobros.tsx:273"},__gh("th",{style:{width:34},"data-gufi-src":"cobros.tsx:274"}),__gh("th",{"data-gufi-src":"cobros.tsx:275"},"Entrada"),__gh("th",{"data-gufi-src":"cobros.tsx:275"},"Hu\xE9sped"),__gh("th",{"data-gufi-src":"cobros.tsx:275"},"Canal"),__gh("th",{"data-gufi-src":"cobros.tsx:275"},"Factura"),__gh("th",{"data-r":"1","data-gufi-src":"cobros.tsx:276"},"Facturado"),__gh("th",{"data-r":"1","data-gufi-src":"cobros.tsx:276"},"Canal"),__gh("th",{"data-r":"1","data-gufi-src":"cobros.tsx:276"},"Recepci\xF3n"),__gh("th",{"data-r":"1","data-gufi-src":"cobros.tsx:276"},"Pendiente"))),__gh("tbody",{"data-gufi-src":"cobros.tsx:278"},filas.slice(0,cuantas).map(e=>{let canal=canalEstancia(e);return __gh("tr",{key:e.codigo,className:"p-click",onClick:()=>setAbierta(e.codigo),"data-gufi-src":"cobros.tsx:282"},__gh("td",{onClick:ev=>ev.stopPropagation(),"data-gufi-src":"cobros.tsx:283"},e.pendiente>0?__gh("input",{type:"checkbox",checked:!!marcadas[e.codigo],onChange:ev=>setMarcadas(m=>({...m,[e.codigo]:ev.target.checked})),"data-gufi-src":"cobros.tsx:284"}):null),__gh("td",{"data-gufi-src":"cobros.tsx:286"},fmtLarga(e.entrada)),__gh("td",{style:{maxWidth:220,overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"cobros.tsx:287"},e.huesped||__gh("span",{style:{color:B.faint},"data-gufi-src":"cobros.tsx:287"},e.codigo)),__gh("td",{"data-gufi-src":"cobros.tsx:288"},__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:7},"data-gufi-src":"cobros.tsx:288"},__gh("span",{className:"p-dot",style:{background:canalColor(canal)},"data-gufi-src":"cobros.tsx:288"}),canal)),__gh("td",{style:{color:e.facturas.length?B.ink:B.amber},"data-gufi-src":"cobros.tsx:289"},e.facturas.length?e.facturas.map(f=>f.numero).join(", "):"sin factura"),__gh("td",{"data-r":"1","data-gufi-src":"cobros.tsx:290"},money2(e.base)),__gh("td",{"data-r":"1",style:{color:e.canal_bruto?B.ink:B.faint},"data-gufi-src":"cobros.tsx:291"},e.canal_bruto?money2(e.canal_bruto):"\u2014"),__gh("td",{"data-r":"1","data-gufi-src":"cobros.tsx:292"},e.recepcion.length?__gh("span",{style:{color:MEDIO_COLOR[e.recepcion[0].medio]},"data-gufi-src":"cobros.tsx:292"},money2(e.recepcion_total)," \xB7 ",[...new Set(e.recepcion.map(r=>r.medio))].join(", ")):__gh("span",{style:{color:B.faint},"data-gufi-src":"cobros.tsx:292"},"\u2014")),__gh("td",{"data-r":"1",style:{fontWeight:600,color:e.pendiente>0?B.amber:B.green},"data-gufi-src":"cobros.tsx:293"},e.pendiente>0?money2(e.pendiente):"cobrada"))})))):__gh(Empty,{text:"Ninguna estancia con ese filtro."}),filas.length>cuantas?__gh("div",{className:"p-note",style:{padding:14,justifyContent:"center"},"data-gufi-src":"cobros.tsx:301"},"Se ven ",num(cuantas)," de ",num(filas.length)," \xB7 ",__gh("button",{className:"p-btn p-btn-s",onClick:()=>setCuantas(n=>n+300),"data-gufi-src":"cobros.tsx:301"},"Ver m\xE1s")):null),__gh("div",{className:"text-[12.5px] mt-3",style:{color:B.muted,lineHeight:1.6},"data-gufi-src":"cobros.tsx:303"},"El canal sale de los informes de pagos de Booking, Hostelworld y Stripe que importa ",marca().nombre,"; la recepci\xF3n, de lo que apunt\xE1is aqu\xED. El TPV del hostal no liquida en una cuenta de ",marca().nombre,", as\xED que Gufi s\xF3lo lo sabe si se apunta."),abiertaViva&&!apuntar?__gh(Recorrido,{api,token,e:abiertaViva,onClose:()=>setAbierta(null),onApuntar:()=>setApuntar([abiertaViva]),onBorrado:recargar}):null,apuntar?__gh(Apuntar,{api,token,estancias:apuntar,medios,onHecho:recargar,onClose:()=>setApuntar(null)}):null):__gh("div",{className:"b-card","data-gufi-src":"cobros.tsx:248"},__gh(Empty,{text:`Ninguna estancia ha entrado en ${year}.`}))}var import_react13=require("react"),import_lucide_react13=require("lucide-react");var quien=concepto=>{let util=String(concepto||"").split("/").map(x=>x.trim()).filter(Boolean).filter(x=>!/^LIQ\.?\s*OP/i.test(x));return util.length>1?util[util.length-1]:String(concepto||"")};function Cuenta({c}){let movil=useIsMobile(),[error,setError]=(0,import_react13.useState)("");async function exportar2(){setError("");try{await exportarTabla(`Cuenta_${limpioArchivo(c.nombre)}.xlsx`,"Movimientos",`${c.nombre} \xB7 ${c.empresa}`,`Del ${fmtLarga(c.desde)} al ${fmtLarga(c.extracto_hasta)} \xB7 saldo ${money2(c.saldo)}`,[{t:"Fecha",w:12,fecha:!0},{t:"Concepto",w:60},{t:"Importe",w:14,eur:!0},{t:"Saldo",w:14,eur:!0},{t:"Pago del canal",w:16},{t:"Reservas",w:10,n:!0},{t:"Nota",w:50}],c.movimientos.map(m=>[m.fecha,m.concepto,m.importe,m.saldo,m.pago?m.pago.canal:"",m.pago?m.pago.reservas:"",m.nota||""]))}catch(e){setError(String(e&&e.message||e))}}return __gh("div",{className:"mb-6","data-gufi-src":"banco.tsx:34"},__gh("div",{className:"b-card p-4 sm:p-5 mb-4",style:{display:"flex",flexWrap:"wrap",gap:18,alignItems:"center"},"data-gufi-src":"banco.tsx:35"},__gh("div",{style:{flex:"1 1 240px",minWidth:0},"data-gufi-src":"banco.tsx:36"},__gh("div",{className:"text-[15px] font-semibold",style:{color:B.ink},"data-gufi-src":"banco.tsx:37"},c.nombre),__gh("div",{className:"text-[12.5px] mt-1",style:{color:B.muted},"data-gufi-src":"banco.tsx:38"},c.empresa," \xB7 ",String(c.banco||"").toUpperCase()," \u2022\u2022\u2022\u2022",c.ultimos," \xB7 extracto hasta el ",fmtLarga(c.extracto_hasta))),__gh("div",{style:{textAlign:"right"},"data-gufi-src":"banco.tsx:40"},__gh("div",{className:"text-[11px] font-semibold uppercase tracking-[.06em]",style:{color:B.faint},"data-gufi-src":"banco.tsx:41"},"Saldo"),__gh("div",{className:"text-[28px] font-semibold b-num",style:{color:B.ink,letterSpacing:"-.03em"},"data-gufi-src":"banco.tsx:42"},c.saldo==null?"\u2014":money2(c.saldo)))),__gh("div",{className:"flex flex-wrap items-center gap-2 mb-3","data-gufi-src":"banco.tsx:45"},__gh("span",{className:"text-[13px]",style:{color:B.muted},"data-gufi-src":"banco.tsx:46"},"Desde el ",fmtLarga(c.desde),": ",__gh("b",{style:{color:B.green},"data-gufi-src":"banco.tsx:47"},money2(c.entradas))," de entradas",c.salidas?__gh(__gf,null," y ",__gh("b",{style:{color:B.red},"data-gufi-src":"banco.tsx:47"},money2(c.salidas))," de salidas"):null," en ",num(c.movimientos.length)," movimientos"),__gh("span",{style:{flex:1},"data-gufi-src":"banco.tsx:49"}),__gh("button",{className:"p-btn",onClick:exportar2,disabled:!c.movimientos.length,"data-gufi-src":"banco.tsx:50"},__gh(import_lucide_react13.Download,{size:15}),"Excel")),error?__gh("div",{className:"p-note",style:{color:B.red,marginBottom:8},"data-gufi-src":"banco.tsx:52"},error):null,__gh("div",{className:"b-card overflow-hidden","data-gufi-src":"banco.tsx:53"},c.movimientos.length?movil?__gh("div",{className:"p-3","data-gufi-src":"banco.tsx:55"},c.movimientos.map(m=>__gh("div",{key:m.id,className:"b-row","data-gufi-src":"banco.tsx:57"},__gh("div",{className:"flex items-baseline justify-between gap-3","data-gufi-src":"banco.tsx:58"},__gh("span",{className:"text-[13px]",style:{color:B.muted},"data-gufi-src":"banco.tsx:59"},fmtLarga(m.fecha)),__gh("span",{className:"text-[15px] font-semibold b-num",style:{color:m.importe<0?B.red:B.ink},"data-gufi-src":"banco.tsx:60"},money2(m.importe))),__gh("div",{className:"text-[13px] mt-1",style:{color:B.ink},"data-gufi-src":"banco.tsx:62"},quien(m.concepto)),m.pago?__gh("div",{className:"text-[12px] mt-1",style:{color:canalColor(m.pago.canal)},"data-gufi-src":"banco.tsx:63"},"Pago de ",m.pago.canal," \xB7 ",num(m.pago.reservas)," reservas"):null,m.nota?__gh("div",{className:"text-[12px] mt-1",style:{color:B.faint},"data-gufi-src":"banco.tsx:64"},m.nota):null))):__gh("table",{className:"p-table","data-gufi-src":"banco.tsx:69"},__gh("thead",{"data-gufi-src":"banco.tsx:70"},__gh("tr",{"data-gufi-src":"banco.tsx:70"},__gh("th",{"data-gufi-src":"banco.tsx:70"},"Fecha"),__gh("th",{"data-gufi-src":"banco.tsx:70"},"Concepto"),__gh("th",{"data-gufi-src":"banco.tsx:70"},"Qu\xE9 es"),__gh("th",{"data-r":"1","data-gufi-src":"banco.tsx:70"},"Importe"),__gh("th",{"data-r":"1","data-gufi-src":"banco.tsx:70"},"Saldo"))),__gh("tbody",{"data-gufi-src":"banco.tsx:71"},c.movimientos.map(m=>__gh("tr",{key:m.id,"data-gufi-src":"banco.tsx:73"},__gh("td",{"data-gufi-src":"banco.tsx:74"},fmtLarga(m.fecha)),__gh("td",{title:m.concepto,style:{maxWidth:320,overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"banco.tsx:75"},quien(m.concepto)),__gh("td",{style:{whiteSpace:"normal",maxWidth:340,fontSize:12.5},"data-gufi-src":"banco.tsx:76"},m.pago?__gh("span",{style:{color:canalColor(m.pago.canal),fontWeight:600},"data-gufi-src":"banco.tsx:77"},"Pago de ",m.pago.canal," \xB7 ",num(m.pago.reservas)," reservas"):m.nota?__gh("span",{style:{color:B.faint},"data-gufi-src":"banco.tsx:78"},m.nota):__gh("span",{style:{color:B.faint},"data-gufi-src":"banco.tsx:78"},"\u2014")),__gh("td",{"data-r":"1",style:{fontWeight:600,color:m.importe<0?B.red:B.ink},"data-gufi-src":"banco.tsx:80"},money2(m.importe)),__gh("td",{"data-r":"1",style:{color:B.muted},"data-gufi-src":"banco.tsx:81"},m.saldo==null?"\u2014":money2(m.saldo)))))):__gh(Empty,{text:"Sin movimientos en estas fechas."})))}function Banco({api,token}){let d2=useScript(api,"portal_banco",{token},!0);return d2.error?__gh("div",{className:"b-card","data-gufi-src":"banco.tsx:94"},__gh(Empty,{text:`No se ha podido leer la cuenta: ${d2.error}`})):d2.cargando?__gh(Spin,null):__gh("div",{className:"b-fade","data-gufi-src":"banco.tsx:97"},__gh(Bloque,{titulo:"Cuenta del hostal",sub:`El extracto que sube ${marca().nombre}, en solo lectura. \xDAltimos 90 d\xEDas.`,icono:import_lucide_react13.Landmark}),d2.datos.cuentas.length?d2.datos.cuentas.map(c=>__gh(Cuenta,{key:c.nombre,c})):__gh("div",{className:"b-card","data-gufi-src":"banco.tsx:100"},__gh(Empty,{text:`Tu hostal todav\xEDa no tiene una cuenta de ${marca().nombre} enlazada. P\xEDdeselo a ${marca().nombre}.`})))}var import_react14=require("react"),import_lucide_react14=require("lucide-react");var NOMBRE={reservas:"Reservas",facturas:"Facturas",cobros:"Cobros del canal",recepcion:"Cobros en recepci\xF3n",viajeros:"Viajeros",informe:"Informe d\xEDa a d\xEDa"};function Copiar({texto}){let[hecho,setHecho]=(0,import_react14.useState)(!1);async function copiar(){await navigator.clipboard.writeText(texto),setHecho(!0),setTimeout(()=>setHecho(!1),1600)}return __gh("button",{className:"p-btn p-btn-s",onClick:copiar,"data-gufi-src":"datos.tsx:22"},hecho?__gh(import_lucide_react14.Check,{size:13,style:{color:B.green}}):__gh(import_lucide_react14.Copy,{size:13}),hecho?"Copiada":"Copiar")}function Datos({api,token}){let[version,setVersion]=(0,import_react14.useState)(0),d2=useScript(api,"portal_datos",{token,accion:"ver",version},!0),[nombre,setNombre]=(0,import_react14.useState)(""),[ocupado,setOcupado]=(0,import_react14.useState)(!1),[error,setError]=(0,import_react14.useState)(""),[revocando,setRevocando]=(0,import_react14.useState)(null),[verClave,setVerClave]=(0,import_react14.useState)({}),[formato,setFormato]=(0,import_react14.useState)("csv"),anio=new Date().getFullYear();async function accion(input){setOcupado(!0),setError("");try{await api("portal_datos",{token,...input}),setNombre(""),setRevocando(null),setVersion(v=>v+1)}catch(e){setError(String(e&&e.message||e))}setOcupado(!1)}if(d2.error)return __gh("div",{className:"b-card","data-gufi-src":"datos.tsx:44"},__gh(Empty,{text:d2.error}));if(d2.cargando)return __gh(Spin,null);let{claves,url,tablas,formatos,max_activas}=d2.datos,activas=claves.filter(k=>k.activa),clave=activas[0],enlace=t=>`${url}?clave=${encodeURIComponent(clave.clave)}&tabla=${t.tabla}${t.fechas?`&desde=${anio}-01-01&hasta=${anio}-12-31`:""}${formato==="json"?"&formato=json":""}`;return __gh("div",{className:"b-fade","data-gufi-src":"datos.tsx:52"},__gh(Bloque,{titulo:"Tus datos, en solo lectura",sub:"Para Excel, una IA o tus propios informes: se actualizan solos, sin pedirnos nada",icono:import_lucide_react14.KeyRound}),__gh("div",{className:"b-card p-4 sm:p-5 mb-5 text-[13px]",style:{color:B.sub,lineHeight:1.65},"data-gufi-src":"datos.tsx:55"},__gh("b",{style:{color:B.ink},"data-gufi-src":"datos.tsx:56"},"En Excel:")," Datos \u2192 Obtener datos \u2192 Desde la web \u2192 pega el enlace de la tabla. Luego \xABActualizar todo\xBB trae lo \xFAltimo."," ",__gh("b",{style:{color:B.ink},"data-gufi-src":"datos.tsx:57"},"En Google Sheets:")," ",__gh("code",{style:{fontSize:12},"data-gufi-src":"datos.tsx:57"},'=IMPORTDATA("enlace")'),"."," ",__gh("b",{style:{color:B.ink},"data-gufi-src":"datos.tsx:58"},"Una IA")," puede leer el mismo enlace.",__gh("div",{style:{marginTop:8,color:B.muted},"data-gufi-src":"datos.tsx:59"},"Nadie puede cambiar nada desde aqu\xED: s\xF3lo se lee. La clave es tuya y da acceso a los datos de tu hostal, as\xED que tr\xE1tala como una contrase\xF1a: si se escapa, rev\xF3cala y crea otra. Las fechas de los enlaces se cambian en ",__gh("code",{style:{fontSize:12},"data-gufi-src":"datos.tsx:61"},"desde=")," y ",__gh("code",{style:{fontSize:12},"data-gufi-src":"datos.tsx:61"},"hasta="),".")),error?__gh("div",{className:"p-note",style:{color:B.red,marginBottom:10},"data-gufi-src":"datos.tsx:65"},error):null,clave?__gh("div",{className:"b-card overflow-hidden mb-5","data-gufi-src":"datos.tsx:68"},__gh("div",{style:{display:"flex",gap:12,alignItems:"center",padding:"13px 18px",borderBottom:`1px solid ${B.hair}`,flexWrap:"wrap"},"data-gufi-src":"datos.tsx:69"},__gh(Seg,{value:formato,onChange:setFormato,options:[["csv","CSV \xB7 Excel"],["json","JSON \xB7 aplicaci\xF3n"]]}),__gh("span",{className:"text-[12.5px]",style:{color:B.muted,flex:"1 1 260px",lineHeight:1.5},"data-gufi-src":"datos.tsx:71"},formatos[formato])),tablas.map(t=>__gh("div",{key:t.tabla,style:{display:"flex",gap:12,alignItems:"center",padding:"13px 18px",borderBottom:"1px solid #f0f0f2",flexWrap:"wrap"},"data-gufi-src":"datos.tsx:74"},__gh("div",{style:{flex:"1 1 280px",minWidth:0},"data-gufi-src":"datos.tsx:75"},__gh("div",{className:"text-[14px] font-semibold",style:{color:B.ink},"data-gufi-src":"datos.tsx:76"},NOMBRE[t.tabla]||t.tabla),__gh("div",{className:"text-[12.5px]",style:{color:B.muted,marginTop:2},"data-gufi-src":"datos.tsx:77"},t.que,t.fechas?` Enlace con el a\xF1o ${anio}.`:"")),__gh("div",{style:{display:"flex",gap:6},"data-gufi-src":"datos.tsx:79"},__gh(Copiar,{texto:enlace(t)}),__gh("a",{className:"p-btn p-btn-s",href:enlace(t),target:"_blank",rel:"noreferrer","data-gufi-src":"datos.tsx:81"},__gh(import_lucide_react14.Download,{size:13}),formato==="json"?"JSON":"CSV"))))):__gh("div",{className:"b-card mb-5","data-gufi-src":"datos.tsx:87"},__gh(Empty,{text:"No tienes ninguna clave activa. Crea una abajo para tener tus enlaces."})),__gh("div",{className:"b-card overflow-hidden","data-gufi-src":"datos.tsx:90"},__gh("div",{style:{padding:"14px 18px",borderBottom:`1px solid ${B.hair}`,display:"flex",alignItems:"baseline",gap:10},"data-gufi-src":"datos.tsx:91"},__gh("span",{className:"text-[15px] font-semibold",style:{color:B.ink},"data-gufi-src":"datos.tsx:92"},"Claves"),__gh("span",{className:"p-note","data-gufi-src":"datos.tsx:93"},num(activas.length)," de ",num(max_activas)," activas \xB7 los enlaces de arriba usan la m\xE1s reciente")),claves.map(k=>__gh("div",{key:k.id,style:{display:"flex",gap:12,alignItems:"center",padding:"12px 18px",borderBottom:"1px solid #f0f0f2",flexWrap:"wrap",opacity:k.activa?1:.55},"data-gufi-src":"datos.tsx:96"},__gh("div",{style:{flex:"1 1 280px",minWidth:0},"data-gufi-src":"datos.tsx:97"},__gh("div",{className:"b-num",style:{fontSize:13,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",color:B.ink,overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"datos.tsx:98"},verClave[k.id]?k.clave:`${k.clave.slice(0,5)}\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022${k.clave.slice(-4)}`),__gh("div",{className:"text-[12px]",style:{color:B.muted,marginTop:2},"data-gufi-src":"datos.tsx:101"},k.activa?"Activa":"Revocada"," \xB7 creada el ",fmtLarga(k.creada)," \xB7 ",k.usos?`${num(k.usos)} usos, el \xFAltimo el ${fmtLarga(k.ultimo_uso)}`:"sin usar todav\xEDa",k.notas?` \xB7 ${k.notas}`:"")),k.activa?__gh("div",{style:{display:"flex",gap:6},"data-gufi-src":"datos.tsx:106"},__gh("button",{className:"p-btn p-btn-s",onClick:()=>setVerClave(v=>({...v,[k.id]:!v[k.id]})),"data-gufi-src":"datos.tsx:107"},verClave[k.id]?"Ocultar":"Ver"),__gh(Copiar,{texto:k.clave}),__gh("button",{className:"p-btn p-btn-s",disabled:ocupado,style:{color:revocando===k.id?B.red:void 0},onClick:()=>revocando===k.id?accion({accion:"revocar",id:k.id}):setRevocando(k.id),"data-gufi-src":"datos.tsx:109"},revocando===k.id?"Pulsa otra vez para revocar":"Revocar")):null)),activas.lengthsetNombre(e.target.value),"data-gufi-src":"datos.tsx:119"}),__gh("button",{className:"p-btn p-btn-a",disabled:ocupado,onClick:()=>accion({accion:"crear",nombre}),"data-gufi-src":"datos.tsx:120"},__gh(import_lucide_react14.Plus,{size:15}),"Nueva clave")):null))}async function descargarFactura(api,token,facturaId){let r=await api("portal_factura_pdf",{token,facturaId}),bin=atob(r.pdf),bytes=new Uint8Array(bin.length);for(let i=0;i{document.body.removeChild(a),URL.revokeObjectURL(url)},120)}function unidadesDe(propiedades,sel){if(!sel||sel==="all")return[];if(sel.startsWith("h:")){let h=sel.slice(2);return propiedades.filter(p=>habitacionDe(p.nickname)===h).map(p=>p.id)}return sel.startsWith("u:")?[Number(sel.slice(2))]:[]}function nombreDeSeleccion(propiedades,sel){if(!sel||sel==="all")return"";if(sel.startsWith("h:"))return sel.slice(2);let p=propiedades.find(x=>String(x.id)===sel.slice(2));return p?unidadDe(p.nickname):""}var Selector=({propiedades,sel,setSel,year,setYear,years,conAnio})=>{let habitaciones=(0,import_react15.useMemo)(()=>{let m={};return propiedades.forEach(p=>{let h=habitacionDe(p.nickname);h&&(m[h]=m[h]||[]).push(p)}),Object.keys(m).length&&Object.values(m).reduce((a,v)=>a+v.length,0)===propiedades.length?Object.entries(m).map(([h,ps])=>({h,n:ps.length})).sort((a,b)=>a.h.localeCompare(b.h,"es",{numeric:!0})):[]},[propiedades]);return __gh("div",{className:"flex flex-wrap items-center gap-2.5 mb-4","data-gufi-src":"hostel.tsx:64"},__gh("div",{className:"relative","data-gufi-src":"hostel.tsx:65"},__gh("select",{value:sel,onChange:e=>setSel(e.target.value),className:"b-input b-press appearance-none pr-9 font-medium cursor-pointer",style:{maxWidth:360},"data-gufi-src":"hostel.tsx:66"},__gh("option",{value:"all","data-gufi-src":"hostel.tsx:67"},habitaciones.length?`Todo el establecimiento (${propiedades.length} camas)`:`Todas mis propiedades (${propiedades.length})`),habitaciones.length?__gh("optgroup",{label:"Habitaciones","data-gufi-src":"hostel.tsx:69"},habitaciones.map(x=>__gh("option",{key:x.h,value:`h:${x.h}`,"data-gufi-src":"hostel.tsx:70"},x.h," \xB7 ",x.n," camas"))):null,__gh("optgroup",{label:habitaciones.length?"Camas sueltas":"Propiedades","data-gufi-src":"hostel.tsx:73"},propiedades.map(p=>__gh("option",{key:p.id,value:`u:${p.id}`,"data-gufi-src":"hostel.tsx:74"},unidadDe(p.nickname))))),__gh(import_lucide_react15.ChevronRight,{size:14,className:"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 rotate-90",style:{color:B.faint}})),conAnio?__gh("select",{value:year,onChange:e=>setYear(e.target.value),className:"b-input b-press appearance-none font-medium cursor-pointer",style:{width:100},"data-gufi-src":"hostel.tsx:80"},years.map(y=>__gh("option",{key:y,value:y,"data-gufi-src":"hostel.tsx:81"},y))):null)};function ReservasTab({resData,txData,cocData,facData,resLoading,ownerName,api,token,onEmitida,onCobros,year,propiedadIds}){let[lens,setLens]=(0,import_react15.useState)("reserva"),[canal,setCanal]=(0,import_react15.useState)("all"),[estadoF,setEstadoF]=(0,import_react15.useState)("reales"),[cobroF,setCobroF]=(0,import_react15.useState)("all"),reservas=(0,import_react15.useMemo)(()=>(resData&&resData.reservas||[]).map(r=>({...r,canal:canalDe(r.canal,esHW(r))})),[resData]),payByCode=(0,import_react15.useMemo)(()=>{let m={};return(txData&&txData.transacciones||[]).forEach(t=>{t.confirmation_code&&!m[t.confirmation_code]&&(m[t.confirmation_code]=t)}),m},[txData]),concByCode=(0,import_react15.useMemo)(()=>{let m={};return(cocData&&cocData.ingresos||[]).forEach(g=>{(g.reservas||[]).forEach(rr=>{rr.codigo&&!m[rr.codigo]&&(m[rr.codigo]={importe:Number(rr.importe)||0,payout:Number(g.payout_importe)||0,compartido:!!g.compartido,fecha:g.fecha})})}),m},[cocData]),canales=(0,import_react15.useMemo)(()=>{let s=new Set;return reservas.forEach(r=>{r.canal&&s.add(r.canal)}),Array.from(s).sort()},[reservas]),hayHW=(0,import_react15.useMemo)(()=>reservas.some(r=>String(r.confirmation_code||"").startsWith("HWG-")),[reservas]),[hwOpen,setHwOpen]=(0,import_react15.useState)(!1),facturasPorReserva=(0,import_react15.useMemo)(()=>{let m={};return(facData&&facData.facturas||[]).forEach(f=>{f.reserva!=null&&(m[f.reserva]=m[f.reserva]||[]).push(f)}),m},[facData]),facturasPorGrupo=(0,import_react15.useMemo)(()=>{let porId={};reservas.forEach(r=>{porId[r.id]=r});let m={};return(facData&&facData.facturas||[]).forEach(f=>{let r=f.reserva==null?null:porId[f.reserva];if(!r)return;let k=grupoKey(r);(m[k]=m[k]||[]).push(f)}),m},[facData,reservas]),REALES=["accepted","pending","denied"],filtered=(0,import_react15.useMemo)(()=>reservas.filter(r=>{if(canal!=="all"&&r.canal!==canal||estadoF==="reales"&&!REALES.includes(r.estado)||estadoF==="canceladas"&&r.estado!=="cancelled")return!1;let pc=payByCode[r.confirmation_code],cobrada=!!(pc&&pc.charge_status==="captured");return!(cobroF==="cobradas"&&!cobrada||cobroF==="pendientes"&&cobrada||cobroF==="conciliadas"&&!concByCode[r.confirmation_code])}),[reservas,canal,estadoF,cobroF,concByCode,payByCode]),portadoraDe=(0,import_react15.useMemo)(()=>{let m={};return filtered.forEach(r=>{let k=r.confirmation_code;k&&(m[k]==null||r.id{let ingreso=0,conc=0,cobrado=0,contados=new Set;return filtered.forEach(r=>{let inc=Number(r.owner_revenue)||0;ingreso+=inc;let k=r.confirmation_code,c=concByCode[k];c&&k&&!contados.has(k)&&(contados.add(k),conc+=c.importe);let pc=payByCode[k];pc&&pc.charge_status==="captured"&&(cobrado+=inc)}),{ingreso,conc,cobrado,pendiente:Math.max(0,ingreso-cobrado),n:filtered.length}},[filtered,concByCode,payByCode]);return __gh("div",{className:"b-fade","data-gufi-src":"hostel.tsx:158"},__gh(Tabs,{value:lens,onChange:setLens,options:[["reserva","Reservas"],["cobros","Cobros"]]}),lens==="reserva"?__gh("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3 mb-5","data-gufi-src":"hostel.tsx:164"},__gh(KPI,{label:"Tu ingreso",value:money0(band.ingreso),sub:`${num(band.n)} reservas`,accent:B.accent}),__gh(KPI,{label:"Cobrado",value:money0(band.cobrado),sub:"por el canal",accent:B.green}),__gh(KPI,{label:"Pendiente",value:money0(band.pendiente),sub:"por cobrar",accent:B.amber}),__gh(KPI,{label:"Conciliado",value:money0(band.conc),sub:"en banco",accent:B.green})):null,lens==="reserva"?__gh("div",{className:"flex flex-col gap-2 mb-4","data-gufi-src":"hostel.tsx:172"},__gh("div",{className:"flex flex-wrap items-center gap-2","data-gufi-src":"hostel.tsx:173"},__gh(FChip,{active:canal==="all",onClick:()=>setCanal("all")},"Todos los canales"),canales.map(c=>__gh(FChip,{key:c,active:canal===c,onClick:()=>setCanal(c),color:canalColor(c)},c))),__gh("div",{className:"flex flex-wrap items-center gap-2","data-gufi-src":"hostel.tsx:177"},[["reales","Reales"],["canceladas","Canceladas"],["all","Todas"]].map(([k,l])=>__gh(FChip,{key:k,active:estadoF===k,onClick:()=>setEstadoF(k)},l)),__gh("span",{style:{width:1,height:20,background:B.hair,margin:"0 4px"},"data-gufi-src":"hostel.tsx:179"}),[["all","Todo cobro"],["cobradas","Cobradas"],["pendientes","Pendientes"],["conciliadas","Conciliadas"]].map(([k,l])=>__gh(FChip,{key:k,active:cobroF===k,onClick:()=>setCobroF(k)},l)),hayHW?__gh(__gf,null,__gh("span",{style:{flex:1},"data-gufi-src":"hostel.tsx:183"}),__gh("button",{onClick:()=>setHwOpen(!0),className:"b-press",style:{padding:"6px 12px",borderRadius:999,fontSize:12.5,fontWeight:600,cursor:"pointer",border:`1px solid ${B.hair}`,background:"#fff",color:B.muted,display:"inline-flex",alignItems:"center",gap:6},"data-gufi-src":"hostel.tsx:184"},__gh(import_lucide_react15.Upload,{size:13}),"Importar cobros Hostelworld (CSV)")):null)):null,lens==="reserva"?__gh(Reservas2,{filtered,payByCode,concByCode,portadoraDe,setCanal,loading:resLoading,facturasPorReserva,facturasPorGrupo,api,token,onEmitida,truncado:reservas.length>=3e3}):__gh(Cobros,{api,token,year,propiedadIds,ownerName}),hwOpen?__gh(HwImportModal,{api,token,onClose:()=>setHwOpen(!1),onDone:onCobros}):null)}function HwImportModal({api,token,onClose,onDone}){let fileRef=(0,import_react15.useRef)(null),[drag,setDrag]=(0,import_react15.useState)(!1),[fase,setFase]=(0,import_react15.useState)("pick"),[busy,setBusy]=(0,import_react15.useState)(!1),[err,setErr]=(0,import_react15.useState)(""),[payload,setPayload]=(0,import_react15.useState)(null),[prev,setPrev]=(0,import_react15.useState)(null),[fin,setFin]=(0,import_react15.useState)(null);async function leerFichero(file){if(file){setErr(""),setBusy(!0);try{let text=await file.text(),raw=parseCSV(text).filter(r=>r.length>1);if(raw.length<2)throw new Error("el CSV no trae filas");let norm=x=>String(x||"").toLowerCase().replace(/[^a-z]/g,""),head=raw[0].map(norm),ix={reference:head.indexOf("reference"),guest:head.indexOf("guestname"),arrival:head.indexOf("arrival"),bed_price:head.indexOf("bedpriceeur"),balance_due:head.indexOf("balancedueeur"),booked:head.indexOf("booked"),nights:head.indexOf("nights"),guests:head.indexOf("guests"),room_type:head.indexOf("roomtype"),source:head.indexOf("source")};if(ix.reference<0||ix.bed_price<0||ix.balance_due<0)throw new Error("esto no parece el CSV del inbox de Hostelworld (Bookings \u2192 Advanced Search \u2192 CSV)");let data=raw.slice(1).filter(r=>r[ix.reference]).map(r=>({reference:r[ix.reference],guest:r[ix.guest],arrival:r[ix.arrival],bed_price:r[ix.bed_price],balance_due:r[ix.balance_due],booked:r[ix.booked],nights:r[ix.nights],guests:r[ix.guests],room_type:r[ix.room_type],source:r[ix.source]}));if(!data.length)throw new Error("el CSV no trae reservas");let res=await api("portal_hw_cobros_import",{token,rows:data,preview:!0});setPayload(data),setPrev(res),setFase("preview")}catch(e){setErr(e&&e.message||String(e))}finally{setBusy(!1),fileRef.current&&(fileRef.current.value="")}}}async function confirmar(){setBusy(!0),setErr("");try{let r=await api("portal_hw_cobros_import",{token,rows:payload});setFin(r),setFase("done"),onDone&&onDone()}catch(e){setErr(e&&e.message||String(e))}finally{setBusy(!1)}}let dot=estado=>estado==="ok"?__gh(import_lucide_react15.CheckCircle2,{size:14,style:{color:B.green,flexShrink:0}}):estado==="sin_reserva"?__gh(import_lucide_react15.AlertTriangle,{size:14,style:{color:B.amber,flexShrink:0}}):__gh(import_lucide_react15.X,{size:14,style:{color:B.red,flexShrink:0}}),chip=(n,texto,color)=>n?__gh("span",{className:"text-[12.5px] font-bold",style:{color},"data-gufi-src":"hostel.tsx:245"},num(n)," ",texto):null;return __gh("div",{className:"b-fade",style:{position:"fixed",inset:0,zIndex:60,background:"rgba(26,18,19,0.45)",display:"flex",alignItems:"center",justifyContent:"center",padding:16},onClick:busy?void 0:onClose,"data-gufi-src":"hostel.tsx:248"},__gh("div",{className:"b-card b-rise",style:{width:"min(680px, 100%)",maxHeight:"86vh",display:"flex",flexDirection:"column",overflow:"hidden"},onClick:e=>e.stopPropagation(),"data-gufi-src":"hostel.tsx:249"},__gh("div",{className:"flex items-center gap-3 px-5 py-4",style:{boxShadow:`inset 0 -1px 0 ${B.hair}`},"data-gufi-src":"hostel.tsx:250"},__gh("div",{className:"flex h-9 w-9 items-center justify-center rounded-xl",style:{background:B.accentSoft},"data-gufi-src":"hostel.tsx:251"},__gh(import_lucide_react15.Upload,{size:17,style:{color:B.accent}})),__gh("div",{className:"leading-tight",style:{flex:1},"data-gufi-src":"hostel.tsx:252"},__gh("div",{className:"text-[15px] font-bold",style:{color:B.ink},"data-gufi-src":"hostel.tsx:253"},"Cobros de Hostelworld"),__gh("div",{className:"text-[12px]",style:{color:B.faint},"data-gufi-src":"hostel.tsx:254"},"El CSV del inbox: Bookings \u2192 Advanced Search \u2192 CSV")),__gh("button",{onClick:onClose,className:"b-press",style:{color:B.faint,background:"transparent",border:"none",cursor:"pointer"},"data-gufi-src":"hostel.tsx:256"},__gh(import_lucide_react15.X,{size:18}))),__gh("div",{style:{flex:1,overflowY:"auto",padding:"18px 20px"},"data-gufi-src":"hostel.tsx:259"},fase==="pick"?__gh("div",{className:"b-fade","data-gufi-src":"hostel.tsx:261"},__gh("div",{onDragOver:e=>{e.preventDefault(),setDrag(!0)},onDragLeave:()=>setDrag(!1),onDrop:e=>{e.preventDefault(),setDrag(!1),leerFichero(e.dataTransfer.files&&e.dataTransfer.files[0])},onClick:()=>fileRef.current&&fileRef.current.click(),style:{border:`1.5px dashed ${drag?B.accent:B.hair}`,background:drag?B.accentSoft:B.bg,borderRadius:14,padding:"34px 20px",textAlign:"center",cursor:"pointer",transition:"all .15s"},"data-gufi-src":"hostel.tsx:262"},busy?__gh("div",{className:"text-[14px] font-semibold",style:{color:B.muted},"data-gufi-src":"hostel.tsx:269"},"Leyendo el CSV\u2026"):__gh(__gf,null,__gh(import_lucide_react15.Upload,{size:26,style:{color:drag?B.accent:B.faint,marginBottom:10}}),__gh("div",{className:"text-[14.5px] font-semibold",style:{color:B.ink},"data-gufi-src":"hostel.tsx:272"},drag?"Suelta el archivo aqu\xED":"Arrastra el CSV aqu\xED o pulsa para elegirlo"),__gh("div",{className:"text-[12px] mt-1",style:{color:B.faint},"data-gufi-src":"hostel.tsx:273"},"Reci\xE9n bajado de Hostelworld, tal cual \u2014 sin abrirlo ni tocarlo"))),__gh("input",{ref:fileRef,type:"file",accept:".csv,text/csv",style:{display:"none"},onChange:e=>leerFichero(e.target.files&&e.target.files[0]),"data-gufi-src":"hostel.tsx:276"}),__gh("div",{className:"text-[12.5px] mt-4",style:{color:B.muted,lineHeight:1.6},"data-gufi-src":"hostel.tsx:277"},"Antes de guardar nada ver\xE1s qu\xE9 entra: cada reserva con su dep\xF3sito ya cobrado por Hostelworld y lo que queda por cobrar en recepci\xF3n. Re-importar no duplica: actualiza.")):fase==="preview"&&prev?__gh("div",{className:"b-fade","data-gufi-src":"hostel.tsx:283"},__gh("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 mb-3","data-gufi-src":"hostel.tsx:284"},chip(prev.ok,prev.ok===1?"reserva entra":"reservas entran",B.green),chip(prev.sin_reserva,"sin reserva todav\xEDa",B.amber),chip(prev.errores,"ilegibles",B.red)),prev.ok?__gh("div",{className:"text-[12.5px] mb-3",style:{color:B.muted},"data-gufi-src":"hostel.tsx:290"},"Dep\xF3sito ya cobrado por Hostelworld ",__gh("b",{style:{color:B.green},"data-gufi-src":"hostel.tsx:291"},money2(prev.deposito_total))," \xB7 resto (recepci\xF3n o paynow) ",__gh("b",{style:{color:B.amber},"data-gufi-src":"hostel.tsx:291"},money2(prev.pendiente_total))):null,__gh("div",{style:{maxHeight:300,overflowY:"auto",border:`1px solid ${B.hair}`,borderRadius:12},"data-gufi-src":"hostel.tsx:294"},(prev.filas||[]).map((f,k)=>__gh("div",{key:k,className:"flex items-center gap-2.5 px-3 py-2 text-[12.5px]",style:{borderBottom:`1px solid ${B.hair}`,background:f.estado==="error"?"rgba(220,38,38,0.04)":f.estado==="sin_reserva"?"rgba(180,83,9,0.04)":"transparent"},"data-gufi-src":"hostel.tsx:296"},dot(f.estado),__gh("span",{className:"b-num",style:{color:B.faint,width:86,flexShrink:0},"data-gufi-src":"hostel.tsx:298"},f.referencia),__gh("span",{style:{flex:1,color:B.ink,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"data-gufi-src":"hostel.tsx:299"},f.huesped||"\u2014"),__gh("span",{className:"b-num",style:{color:B.muted,flexShrink:0},"data-gufi-src":"hostel.tsx:300"},f.estado==="ok"?__gh(__gf,null,"dep. ",__gh("b",{style:{color:B.green},"data-gufi-src":"hostel.tsx:302"},money2(f.deposito))," \xB7 resto ",money2(f.pendiente)):f.motivo)))),prev.filas_truncadas?__gh("div",{className:"text-[11.5px] mt-2",style:{color:B.faint},"data-gufi-src":"hostel.tsx:308"},"\u2026y ",num(prev.filas_truncadas)," filas m\xE1s que no caben en la lista (entran igual)."):null,prev.sin_reserva?__gh("div",{className:"text-[11.5px] mt-2",style:{color:B.faint},"data-gufi-src":"hostel.tsx:309"},"Las \xABsin reserva todav\xEDa\xBB a\xFAn no han bajado del channel manager \u2014 re-importa este CSV en unos d\xEDas y entrar\xE1n solas."):null):fase==="done"&&fin?__gh("div",{className:"b-rise",style:{textAlign:"center",padding:"26px 10px"},"data-gufi-src":"hostel.tsx:312"},__gh(import_lucide_react15.CheckCircle2,{size:44,style:{color:B.green,marginBottom:12}}),__gh("div",{className:"text-[17px] font-bold",style:{color:B.ink},"data-gufi-src":"hostel.tsx:314"},num(fin.insertadas+fin.actualizadas)," cobros cargados"),__gh("div",{className:"text-[12.5px] mt-1.5",style:{color:B.muted},"data-gufi-src":"hostel.tsx:315"},num(fin.insertadas)," nuevos \xB7 ",num(fin.actualizadas)," actualizados",fin.sin_reserva?__gh(__gf,null," \xB7 ",num(fin.sin_reserva)," sin reserva todav\xEDa"):null),__gh("div",{className:"text-[12.5px] mt-3",style:{color:B.muted},"data-gufi-src":"hostel.tsx:318"},"Dep\xF3sito Hostelworld ",__gh("b",{style:{color:B.green},"data-gufi-src":"hostel.tsx:319"},money2(fin.deposito_total))," \xB7 pendiente en recepci\xF3n ",__gh("b",{style:{color:B.amber},"data-gufi-src":"hostel.tsx:319"},money2(fin.pendiente_total)))):null,err?__gh("div",{className:"text-[12.5px] mt-3 font-semibold",style:{color:B.red},"data-gufi-src":"hostel.tsx:323"},err):null),__gh("div",{className:"flex items-center justify-end gap-2 px-5 py-4",style:{boxShadow:`inset 0 1px 0 ${B.hair}`},"data-gufi-src":"hostel.tsx:326"},fase==="done"?__gh("button",{onClick:onClose,className:"b-press",style:{padding:"8px 18px",borderRadius:999,fontSize:13,fontWeight:700,cursor:"pointer",border:"none",background:B.grad,color:"#fff"},"data-gufi-src":"hostel.tsx:328"},"Listo"):__gh(__gf,null,__gh("button",{onClick:onClose,disabled:busy,className:"b-press",style:{padding:"8px 16px",borderRadius:999,fontSize:13,fontWeight:600,cursor:"pointer",border:`1px solid ${B.hair}`,background:"#fff",color:B.muted},"data-gufi-src":"hostel.tsx:330"},"Cancelar"),fase==="preview"&&prev?__gh("button",{onClick:confirmar,disabled:busy||!prev.ok,className:"b-press",style:{padding:"8px 18px",borderRadius:999,fontSize:13,fontWeight:700,cursor:busy||!prev.ok?"default":"pointer",border:"none",background:B.grad,color:"#fff",opacity:busy||!prev.ok?.55:1},"data-gufi-src":"hostel.tsx:332"},busy?"Importando\u2026":`Importar ${num(prev.ok)} cobros`):null))))}function parseCSV(text){let rows=[],cur=[""],q=!1;for(let i=0;i1||cur[0])&&rows.push(cur),rows}var grupoKey=r=>r.confirmation_code?`c:${r.confirmation_code}`:`n:${String(r.huesped_nombre||"").trim().toLowerCase()}|${String(r.check_in||"").slice(0,10)}|${String(r.check_out||"").slice(0,10)}`;function FacturaCell({facturas,grupo,reserva,api,token,onEmitida}){let[busy,setBusy]=(0,import_react15.useState)(!1),[confirmar,setConfirmar]=(0,import_react15.useState)(!1),[err,setErr]=(0,import_react15.useState)(""),stop=e=>{e.stopPropagation(),e.preventDefault()};async function bajar(e,f){if(stop(e),!busy){setBusy(!0),setErr("");try{await descargarFactura(api,token,f.id)}catch(ex){setErr(String(ex.message||ex))}finally{setBusy(!1)}}}async function emitir(e){if(stop(e),!confirmar){setConfirmar(!0),setTimeout(()=>setConfirmar(!1),4e3);return}setConfirmar(!1),setBusy(!0),setErr("");try{let r=await api("portal_factura_emitir",{token,reservaId:reserva.id});r&&r.ok===!1?setErr(r.mensaje||r.motivo):onEmitida&&await onEmitida()}catch(ex){setErr(String(ex.message||ex))}finally{setBusy(!1)}}return busy?__gh(import_lucide_react15.Loader2,{size:14,className:"animate-spin",style:{color:B.accent}}):err?__gh("span",{className:"text-[11.5px]",style:{color:B.red},title:err,"data-gufi-src":"hostel.tsx:394"},err.slice(0,42)):facturas&&facturas.length?__gh("div",{className:"flex items-center gap-1.5 flex-wrap","data-gufi-src":"hostel.tsx:398"},facturas.map(f=>f.estado==="revision"?__gh("span",{key:f.id,title:f.aviso||"Importe pendiente de revisar","data-gufi-src":"hostel.tsx:400"},__gh(Badge,{text:`${f.numero_completo} \xB7 revisar`,color:B.amber})):__gh("button",{key:f.id,onClick:e=>bajar(e,f),className:"b-pill b-press",title:`Descargar ${f.numero_completo}`,style:{color:B.accent,background:B.accentSoft,boxShadow:`inset 0 0 0 1px ${B.accent}2a`,border:"none",cursor:"pointer"},"data-gufi-src":"hostel.tsx:402"},__gh(import_lucide_react15.Download,{size:11}),f.numero_completo))):grupo&&grupo.length?__gh("div",{className:"flex items-center gap-1.5 flex-wrap","data-gufi-src":"hostel.tsx:414"},grupo.map(f=>__gh("button",{key:f.id,onClick:e=>bajar(e,f),className:"b-pill b-press",title:`Esta cama va dentro de la factura ${f.numero_completo}${f.huespedes>1?` (${f.huespedes} hu\xE9spedes)`:""}`,style:{color:B.muted,background:"transparent",boxShadow:`inset 0 0 0 1px ${B.hair}`,border:"none",cursor:"pointer",fontStyle:"italic"},"data-gufi-src":"hostel.tsx:416"},__gh(import_lucide_react15.Download,{size:11}),f.numero_completo))):reserva.estado==="accepted"&&Number(reserva.precio_total)>0?__gh("button",{onClick:emitir,className:"b-pill b-press",title:"Emitir la factura de esta reserva",style:{color:confirmar?"#fff":B.muted,background:confirmar?B.accent:"transparent",boxShadow:`inset 0 0 0 1px ${confirmar?B.accent:B.hair}`,border:"none",cursor:"pointer"},"data-gufi-src":"hostel.tsx:428"},confirmar?__gh(__gf,null,"\xBFEmitir?"):__gh(__gf,null,__gh(import_lucide_react15.Plus,{size:11}),"Emitir")):__gh("span",{style:{color:B.faint},"data-gufi-src":"hostel.tsx:426"},"\u2014")}function Reservas2({filtered,payByCode,concByCode,portadoraDe,setCanal,loading,facturasPorReserva,facturasPorGrupo,api,token,onEmitida,truncado}){let[detail,setDetail]=(0,import_react15.useState)(null),movil=useIsMobile(),[sort,toggleSort]=useSort(),accessors=(0,import_react15.useMemo)(()=>({confirmation_code:r=>r.confirmation_code||"",propiedad_nickname:r=>unidadDe(r.propiedad_nickname),huesped_nombre:r=>r.huesped_nombre||"",canal:r=>r.canal||"",check_in:r=>tsOf(r.check_in),check_out:r=>tsOf(r.check_out),noches:r=>r.noches!=null?Number(r.noches):null,precio_total:r=>r.precio_total!=null?Number(r.precio_total):null,owner_revenue:r=>r.owner_revenue!=null?Number(r.owner_revenue):null,conciliado:r=>{let c=concByCode[r.confirmation_code];return c&&portadoraDe[r.confirmation_code]===r.id?c.importe:null},cobro:r=>{let p=payByCode[r.confirmation_code];return p?chargeInfo(p.charge_status).t:""},estado:r=>estadoInfo(r.estado).t,factura:r=>{let fs=facturasPorReserva[r.id];return fs&&fs.length?fs[0].numero_completo:""}}),[payByCode,concByCode,facturasPorReserva]),sorted=(0,import_react15.useMemo)(()=>applySort(filtered,sort,accessors),[filtered,sort,accessors]),totales=(0,import_react15.useMemo)(()=>{let contados=new Set;return filtered.reduce((a,r)=>{a.ingreso+=Number(r.owner_revenue)||0;let k=r.confirmation_code,c=concByCode[k];return c&&k&&!contados.has(k)&&(contados.add(k),a.conc+=c.importe),a},{ingreso:0,conc:0})},[filtered,concByCode]);return loading?__gh(Spin,null):__gh("div",{"data-gufi-src":"hostel.tsx:466"},__gh("div",{className:"b-card overflow-hidden","data-gufi-src":"hostel.tsx:467"},__gh(SecTitle,{sub:truncado?"El a\xF1o trae m\xE1s reservas de las que caben en una pantalla: se muestran las 3.000 m\xE1s recientes. Afina con el filtro de arriba.":void 0},"Reservas ",__gh("span",{className:"font-normal text-[13px]",style:{color:B.faint},"data-gufi-src":"hostel.tsx:468"},"\xB7 ",num(filtered.length))),filtered.length?movil?__gh("div",{className:"px-4 pb-4","data-gufi-src":"hostel.tsx:470"},sorted.map(r=>{let ei=estadoInfo(r.estado),pay=payByCode[r.confirmation_code],ci=pay?chargeInfo(pay.charge_status):null,co=concByCode[r.confirmation_code],fx=facturasPorReserva[r.id]||null;return __gh("div",{key:r.id,className:"b-row b-press",onClick:()=>setDetail({r,co,ci,ei,fx}),style:{cursor:"pointer"},"data-gufi-src":"hostel.tsx:472"},__gh("div",{className:"flex items-start justify-between gap-2 mb-1.5","data-gufi-src":"hostel.tsx:473"},__gh("div",{className:"min-w-0","data-gufi-src":"hostel.tsx:474"},__gh("div",{className:"text-[14px] font-bold truncate",style:{color:B.ink},"data-gufi-src":"hostel.tsx:475"},r.huesped_nombre||r.confirmation_code||"\u2014"),__gh("div",{className:"text-[11.5px] truncate",style:{color:B.faint},"data-gufi-src":"hostel.tsx:476"},unidadDe(r.propiedad_nickname))),__gh(Badge,{text:ei.t,color:ei.c})),__gh("div",{className:"b-kv","data-gufi-src":"hostel.tsx:480"},__gh("span",{"data-gufi-src":"hostel.tsx:480"},"Fechas"),__gh("span",{"data-gufi-src":"hostel.tsx:480"},fmtDate(r.check_in)," \u2192 ",fmtDate(r.check_out)," \xB7 ",num(r.noches),"n")),__gh("div",{className:"b-kv","data-gufi-src":"hostel.tsx:481"},__gh("span",{"data-gufi-src":"hostel.tsx:481"},"Canal"),__gh("span",{style:{color:canalColor(r.canal)},"data-gufi-src":"hostel.tsx:481"},r.canal)),__gh("div",{className:"b-kv","data-gufi-src":"hostel.tsx:482"},__gh("span",{"data-gufi-src":"hostel.tsx:482"},"Tu ingreso"),__gh("span",{style:{color:B.accent},"data-gufi-src":"hostel.tsx:482"},money2(r.owner_revenue))),__gh("div",{className:"b-kv","data-gufi-src":"hostel.tsx:483"},__gh("span",{"data-gufi-src":"hostel.tsx:483"},"Conciliado"),__gh("span",{style:{color:co?B.green:B.faint},"data-gufi-src":"hostel.tsx:483"},co?portadoraDe[r.confirmation_code]!==r.id?"va en la estancia":money2(co.importe):"\u2014")),__gh("div",{className:"flex items-center justify-between gap-2 mt-2 pt-2",style:{borderTop:`1px solid ${B.hair}`},"data-gufi-src":"hostel.tsx:484"},__gh("span",{className:"text-[12.5px]",style:{color:B.faint},"data-gufi-src":"hostel.tsx:485"},"Factura"),__gh(FacturaCell,{facturas:fx,grupo:facturasPorGrupo[grupoKey(r)],reserva:r,api,token,onEmitida})))})):__gh(TableWrap,{min:1140},__gh("thead",{"data-gufi-src":"hostel.tsx:493"},__gh("tr",{"data-gufi-src":"hostel.tsx:493"},__gh(SortTh,{sortKey:"confirmation_code",sort,onSort:toggleSort},"C\xF3d."),__gh(SortTh,{sortKey:"propiedad_nickname",sort,onSort:toggleSort},"Propiedad"),__gh(SortTh,{sortKey:"huesped_nombre",sort,onSort:toggleSort},"Hu\xE9sped"),__gh(SortTh,{sortKey:"canal",sort,onSort:toggleSort},"Canal"),__gh(SortTh,{sortKey:"check_in",sort,onSort:toggleSort},"Check-in"),__gh(SortTh,{sortKey:"check_out",sort,onSort:toggleSort},"Check-out"),__gh(SortTh,{sortKey:"noches",sort,onSort:toggleSort,r:!0},"Noches"),__gh(SortTh,{sortKey:"precio_total",sort,onSort:toggleSort,r:!0},"Importe"),__gh(SortTh,{sortKey:"owner_revenue",sort,onSort:toggleSort,r:!0},"Tu ingreso"),__gh(SortTh,{sortKey:"conciliado",sort,onSort:toggleSort,r:!0},"Conciliado"),__gh(SortTh,{sortKey:"cobro",sort,onSort:toggleSort},"Cobro"),__gh(SortTh,{sortKey:"estado",sort,onSort:toggleSort},"Estado"),__gh(SortTh,{sortKey:"factura",sort,onSort:toggleSort,sticky:!0},"Factura"))),__gh("tbody",{"data-gufi-src":"hostel.tsx:494"},sorted.map(r=>{let ei=estadoInfo(r.estado),pay=payByCode[r.confirmation_code],ci=pay?chargeInfo(pay.charge_status):null,co=concByCode[r.confirmation_code],fx=facturasPorReserva[r.id]||null;return __gh("tr",{key:r.id,onClick:()=>setDetail({r,co,ci,ei,fx}),className:"cursor-pointer b-press",style:{cursor:"pointer"},"data-gufi-src":"hostel.tsx:496"},__gh(Td,{b:!0},r.confirmation_code||"\u2014"),__gh(Td,null,unidadDe(r.propiedad_nickname)),__gh(Td,null,r.huesped_nombre||"\u2014"),__gh(Td,null,__gh("button",{onClick:e=>{e.stopPropagation(),setCanal(r.canal)},className:"b-press",style:{color:canalColor(r.canal),fontWeight:600,background:"transparent",border:"none",cursor:"pointer",padding:0},"data-gufi-src":"hostel.tsx:498"},r.canal||"\u2014")),__gh(Td,null,fmtDate(r.check_in)),__gh(Td,null,fmtDate(r.check_out)),__gh(Td,{r:!0},num(r.noches)),__gh(Td,{r:!0},r.precio_total!=null?money2(r.precio_total):"\u2014"),__gh(Td,{r:!0,b:!0},money2(r.owner_revenue)),__gh(Td,{r:!0},co?portadoraDe[r.confirmation_code]!==r.id?__gh("span",{className:"text-[11.5px] italic",style:{color:B.faint},"data-gufi-src":"hostel.tsx:502"},"va en la estancia"):__gh("div",{"data-gufi-src":"hostel.tsx:503"},__gh("span",{style:{fontWeight:700,color:B.green},"data-gufi-src":"hostel.tsx:503"},money2(co.importe)),co.compartido?__gh("div",{className:"text-[10.5px]",style:{color:B.faint},"data-gufi-src":"hostel.tsx:503"},"parte de ",money2(co.payout)):null):__gh("span",{style:{color:B.faint},"data-gufi-src":"hostel.tsx:501"},"\u2014")),__gh(Td,null,ci?__gh(Badge,{text:ci.t,color:ci.c}):__gh("span",{style:{color:B.faint},"data-gufi-src":"hostel.tsx:504"},"\u2014")),__gh(Td,null,__gh(Badge,{text:ei.t,color:ei.c})),__gh(Td,{sticky:!0},__gh(FacturaCell,{facturas:fx,grupo:facturasPorGrupo[grupoKey(r)],reserva:r,api,token,onEmitida})))}))):__gh("div",{className:"px-4 sm:px-5 pb-5","data-gufi-src":"hostel.tsx:469"},__gh(Empty,{text:"No hay reservas con estos filtros."})),filtered.length?__gh("div",{className:"flex flex-wrap items-center justify-end gap-5 px-4 sm:px-5 py-3 text-[13px]",style:{borderTop:`1px solid ${B.hair}`,color:B.muted},"data-gufi-src":"hostel.tsx:513"},__gh("button",{onClick:()=>exportarReservas(sorted,payByCode,concByCode,portadoraDe,facturasPorReserva),className:"b-press flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-[12.5px] font-semibold",style:{background:"#fff",border:`1px solid ${B.hair}`,color:B.muted,cursor:"pointer"},"data-gufi-src":"hostel.tsx:514"},__gh(import_lucide_react15.Download,{size:14})," Excel"),__gh("span",{style:{flex:1},"data-gufi-src":"hostel.tsx:517"}),__gh("span",{"data-gufi-src":"hostel.tsx:518"},"Tu ingreso ",__gh("b",{style:{color:B.ink},"data-gufi-src":"hostel.tsx:518"},money2(totales.ingreso))),__gh("span",{"data-gufi-src":"hostel.tsx:519"},"Conciliado ",__gh("b",{style:{color:B.green},"data-gufi-src":"hostel.tsx:519"},money2(totales.conc)))):null),detail?__gh(ReservaDetail,{...detail,api,token,onEmitida,onClose:()=>setDetail(null)}):null)}function exportarReservas(rows,payByCode,concByCode,portadoraDe,facturasPorReserva){let out=[["C\xF3d. estancia","Propiedad","Hu\xE9sped","Canal","Entrada","Salida","Noches","Hu\xE9spedes","Importe (\u20AC)","Tu ingreso (\u20AC)","Conciliado (\u20AC)","Estado cobro","Estado","Factura","Importe factura (\u20AC)"]];rows.forEach(r=>{let pay=payByCode[r.confirmation_code],co=concByCode[r.confirmation_code],conc=co&&portadoraDe[r.confirmation_code]===r.id?co.importe:null,fs=facturasPorReserva[r.id]||[];out.push([r.confirmation_code||"",unidadDe(r.propiedad_nickname),r.huesped_nombre||"",r.canal||"",dmyCSV(r.check_in),dmyCSV(r.check_out),r.noches==null?"":r.noches,r.huespedes==null?"":r.huespedes,r.precio_total==null?"":eurCSV(r.precio_total),eurCSV(r.owner_revenue),conc==null?"":eurCSV(conc),pay?chargeInfo(pay.charge_status).t:"",estadoInfo(r.estado).t,fs.map(f=>f.numero_completo).join(" \xB7 "),fs.length?eurCSV(fs.reduce((a,f)=>a+(Number(f.total)||0),0)):""])}),downloadCSV("reservas.csv",out)}function ReservaDetail({r,co,ci,fx,api,token,onEmitida,onClose}){let rows=[["C\xF3digo",r.confirmation_code||"\u2014"],["Canal",r.canal||"\u2014"],["Check-in",fmtDate(r.check_in)],["Check-out",fmtDate(r.check_out)],["Noches",num(r.noches)]];return __gh("div",{onClick:onClose,style:{position:"fixed",inset:0,background:"rgba(10,10,18,0.55)",backdropFilter:"blur(2px)",zIndex:1e3,display:"flex",alignItems:"center",justifyContent:"center",padding:20},"data-gufi-src":"hostel.tsx:559"},__gh("div",{onClick:e=>e.stopPropagation(),className:"b-card",style:{width:"100%",maxWidth:560,maxHeight:"88vh",overflowY:"auto"},"data-gufi-src":"hostel.tsx:560"},__gh("div",{className:"flex items-center justify-between px-5 py-4",style:{borderBottom:`1px solid ${B.hair}`},"data-gufi-src":"hostel.tsx:561"},__gh("div",{"data-gufi-src":"hostel.tsx:562"},__gh("div",{className:"text-[16px] font-bold",style:{color:B.ink},"data-gufi-src":"hostel.tsx:563"},r.huesped_nombre||r.confirmation_code),__gh("div",{className:"text-[12.5px]",style:{color:B.faint},"data-gufi-src":"hostel.tsx:564"},r.propiedad_nickname||"\u2014")),__gh("button",{onClick:onClose,style:{background:"transparent",border:"none",cursor:"pointer",color:B.muted,padding:4,fontSize:18},"data-gufi-src":"hostel.tsx:566"},"\u2715")),__gh("div",{className:"px-5 py-4","data-gufi-src":"hostel.tsx:568"},__gh("div",{className:"grid grid-cols-2 gap-3 mb-4","data-gufi-src":"hostel.tsx:569"},__gh("div",{className:"b-card p-3","data-gufi-src":"hostel.tsx:570"},__gh("div",{className:"text-[11px] uppercase tracking-wide",style:{color:B.faint},"data-gufi-src":"hostel.tsx:570"},"Importe reserva"),__gh("div",{className:"text-[1.3rem] font-bold b-num",style:{color:B.ink},"data-gufi-src":"hostel.tsx:570"},r.precio_total!=null?money2(r.precio_total):"\u2014")),__gh("div",{className:"b-card p-3","data-gufi-src":"hostel.tsx:571"},__gh("div",{className:"text-[11px] uppercase tracking-wide",style:{color:B.faint},"data-gufi-src":"hostel.tsx:571"},"Tu ingreso"),__gh("div",{className:"text-[1.3rem] font-bold b-num",style:{color:B.accent},"data-gufi-src":"hostel.tsx:571"},money2(r.owner_revenue)))),__gh("table",{className:"w-full border-collapse mb-4","data-gufi-src":"hostel.tsx:573"},__gh("tbody",{"data-gufi-src":"hostel.tsx:574"},rows.map(([k,v],i)=>__gh("tr",{key:i,"data-gufi-src":"hostel.tsx:574"},__gh("td",{className:"py-1.5 text-[12.5px]",style:{color:B.faint},"data-gufi-src":"hostel.tsx:574"},k),__gh("td",{className:"py-1.5 text-[13px] text-right font-medium",style:{color:B.ink},"data-gufi-src":"hostel.tsx:574"},v))))),__gh("div",{className:"text-[12px] font-bold uppercase tracking-wide mb-2",style:{color:B.faint},"data-gufi-src":"hostel.tsx:576"},"Factura al hu\xE9sped"),__gh("div",{className:"rounded-xl p-3 mb-4",style:{background:B.accentSoft,boxShadow:`inset 0 0 0 1px ${B.accent}22`},"data-gufi-src":"hostel.tsx:577"},fx&&fx.length?__gh("div",{className:"flex flex-col gap-2","data-gufi-src":"hostel.tsx:579"},fx.map(f=>__gh("div",{key:f.id,className:"flex items-center justify-between gap-3","data-gufi-src":"hostel.tsx:581"},__gh("div",{className:"min-w-0","data-gufi-src":"hostel.tsx:582"},__gh("div",{className:"text-[13.5px] font-semibold truncate",style:{color:B.ink},"data-gufi-src":"hostel.tsx:583"},f.numero_completo),__gh("div",{className:"text-[11.5px]",style:{color:B.faint},"data-gufi-src":"hostel.tsx:584"},fmtDate(f.fecha)," \xB7 ",f.tipo==="simplificada"?"simplificada":"completa",f.total!=null?` \xB7 ${money2(f.total)}`:"")),f.estado==="revision"?__gh(Badge,{text:"revisar importe",color:B.amber}):__gh("button",{onClick:()=>descargarFactura(api,token,f.id),className:"b-pill b-press",style:{color:"#fff",background:B.accent,border:"none",cursor:"pointer"},"data-gufi-src":"hostel.tsx:588"},__gh(import_lucide_react15.Download,{size:12}),"PDF")))):__gh("div",{className:"flex items-center justify-between gap-3","data-gufi-src":"hostel.tsx:593"},__gh("span",{className:"text-[13px]",style:{color:B.muted},"data-gufi-src":"hostel.tsx:594"},"Esta reserva todav\xEDa no tiene factura."),__gh(FacturaCell,{facturas:null,grupo:null,reserva:r,api,token,onEmitida}))),__gh("div",{className:"text-[12px] font-bold uppercase tracking-wide mb-2",style:{color:B.faint},"data-gufi-src":"hostel.tsx:599"},"Dinero recibido"),co?__gh("div",{className:"rounded-xl p-3",style:{background:`${B.green}10`,boxShadow:`inset 0 0 0 1px ${B.green}30`},"data-gufi-src":"hostel.tsx:601"},__gh("div",{className:"flex items-center justify-between","data-gufi-src":"hostel.tsx:602"},__gh("span",{className:"text-[13px]",style:{color:B.muted},"data-gufi-src":"hostel.tsx:603"},"Conciliado en banco"),__gh("span",{className:"text-[15px] font-bold b-num",style:{color:B.green},"data-gufi-src":"hostel.tsx:604"},money2(co.importe))),co.compartido?__gh("div",{className:"text-[12px] mt-1",style:{color:B.muted},"data-gufi-src":"hostel.tsx:606"},"Parte de un pago agrupado de ",__gh("b",{"data-gufi-src":"hostel.tsx:606"},money2(co.payout)),co.fecha?` \xB7 ${fmtDate(co.fecha)}`:"","."):co.fecha?__gh("div",{className:"text-[12px] mt-1",style:{color:B.faint},"data-gufi-src":"hostel.tsx:606"},"Pago del ",fmtDate(co.fecha),"."):null):ci?__gh("div",{className:"rounded-xl p-3",style:{background:`${ci.c}10`,boxShadow:`inset 0 0 0 1px ${ci.c}30`},"data-gufi-src":"hostel.tsx:609"},__gh("span",{className:"text-[13px]",style:{color:B.muted},"data-gufi-src":"hostel.tsx:610"},"Estado de cobro: ",__gh("b",{style:{color:ci.c},"data-gufi-src":"hostel.tsx:610"},ci.t)," \u2014 a\xFAn no conciliado en el banco.")):__gh("div",{className:"rounded-xl p-3",style:{background:`${B.faint}10`,boxShadow:`inset 0 0 0 1px ${B.hair}`},"data-gufi-src":"hostel.tsx:613"},__gh("span",{className:"text-[13px]",style:{color:B.muted},"data-gufi-src":"hostel.tsx:614"},"A\xFAn no hay cobro registrado para esta reserva.")))))}function exportarViajeros(rows){let out=[["Entrada","Salida","Documento","Nombre","Direcci\xF3n","Pa\xEDs","Hu\xE9spedes","Propiedad","C\xF3d. estancia"]];rows.forEach(v=>out.push([dmyCSV(v.check_in),dmyCSV(v.check_out),v.documento||"",v.nombre||"",v.direccion||"",v.pais||"",v.huespedes==null?"":v.huespedes,unidadDe(v.propiedad_nickname),v.confirmation_code||""])),downloadCSV("viajeros.csv",out)}function Viajeros({data,loading}){let[sort,toggleSort]=useSort(),movil=useIsMobile(),viajeros=data&&data.viajeros||[],accessors=(0,import_react15.useMemo)(()=>({check_in:v=>tsOf(v.check_in),check_out:v=>tsOf(v.check_out),documento:v=>v.documento||"",nombre:v=>v.nombre||"",direccion:v=>v.direccion||"",pais:v=>v.pais||"",huespedes:v=>v.huespedes!=null?Number(v.huespedes):null,propiedad_nickname:v=>unidadDe(v.propiedad_nickname),confirmation_code:v=>v.confirmation_code||""}),[]),sorted=(0,import_react15.useMemo)(()=>applySort(viajeros,sort,accessors),[viajeros,sort,accessors]);return loading?__gh(Spin,null):__gh("div",{className:"b-fade","data-gufi-src":"hostel.tsx:649"},__gh("div",{className:"mb-4 rounded-xl px-4 py-2.5 text-[12.5px]",style:{background:`${B.amber}12`,color:"#8a5a00",boxShadow:`inset 0 0 0 1px ${B.amber}33`},"data-gufi-src":"hostel.tsx:650"},"Registro de viajeros. Medido el 17-sep-2026 sobre las 101.178 fichas: el ",__gh("b",{"data-gufi-src":"hostel.tsx:651"},"99,7 %")," trae documento y el ",__gh("b",{"data-gufi-src":"hostel.tsx:651"},"80 %")," direcci\xF3n; ciudad y tel\xE9fono s\xF3lo llegan con el ",__gh("b",{"data-gufi-src":"hostel.tsx:651"},"check-in online"),". Son datos personales: tr\xE1talos como tales."),viajeros.length?movil?__gh("div",{"data-gufi-src":"hostel.tsx:654"},sorted.map(v=>__gh("div",{key:v.id,className:"b-row","data-gufi-src":"hostel.tsx:656"},__gh("div",{className:"flex items-start justify-between gap-2 mb-1.5","data-gufi-src":"hostel.tsx:657"},__gh("div",{className:"min-w-0","data-gufi-src":"hostel.tsx:658"},__gh("div",{className:"text-[14px] font-bold truncate",style:{color:B.ink},"data-gufi-src":"hostel.tsx:659"},v.nombre||"\u2014"),__gh("div",{className:"text-[11.5px] truncate",style:{color:B.faint},"data-gufi-src":"hostel.tsx:660"},unidadDe(v.propiedad_nickname))),__gh("span",{className:"text-[11.5px] b-num",style:{color:B.faint},"data-gufi-src":"hostel.tsx:662"},v.confirmation_code||"\u2014")),__gh("div",{className:"b-kv","data-gufi-src":"hostel.tsx:664"},__gh("span",{"data-gufi-src":"hostel.tsx:664"},"Estancia"),__gh("span",{"data-gufi-src":"hostel.tsx:664"},fmtDate(v.check_in)," \u2192 ",fmtDate(v.check_out))),__gh("div",{className:"b-kv","data-gufi-src":"hostel.tsx:665"},__gh("span",{"data-gufi-src":"hostel.tsx:665"},"Hu\xE9spedes"),__gh("span",{"data-gufi-src":"hostel.tsx:665"},num(v.huespedes))),__gh("div",{className:"b-kv","data-gufi-src":"hostel.tsx:666"},__gh("span",{"data-gufi-src":"hostel.tsx:666"},"Pa\xEDs"),__gh("span",{"data-gufi-src":"hostel.tsx:666"},v.pais||"\u2014")),v.direccion?__gh("div",{className:"b-kv","data-gufi-src":"hostel.tsx:667"},__gh("span",{"data-gufi-src":"hostel.tsx:667"},"Direcci\xF3n"),__gh("span",{style:{textAlign:"right"},"data-gufi-src":"hostel.tsx:667"},v.direccion)):null))):__gh("div",{className:"b-card overflow-hidden","data-gufi-src":"hostel.tsx:672"},__gh(SecTitle,{right:__gh("button",{onClick:()=>exportarViajeros(sorted),className:"b-press flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-[12.5px] font-semibold",style:{background:"#fff",border:`1px solid ${B.hair}`,color:B.muted,cursor:"pointer"},"data-gufi-src":"hostel.tsx:673"},__gh(import_lucide_react15.Download,{size:14})," Excel")},"Estancias ",__gh("span",{className:"font-normal text-[13px]",style:{color:B.faint},"data-gufi-src":"hostel.tsx:673"},"\xB7 ",num(viajeros.length))),__gh(TableWrap,{min:780},__gh("thead",{"data-gufi-src":"hostel.tsx:675"},__gh("tr",{"data-gufi-src":"hostel.tsx:675"},__gh(SortTh,{sortKey:"check_in",sort,onSort:toggleSort},"Check-in"),__gh(SortTh,{sortKey:"check_out",sort,onSort:toggleSort},"Check-out"),__gh(SortTh,{sortKey:"documento",sort,onSort:toggleSort},"Documento"),__gh(SortTh,{sortKey:"nombre",sort,onSort:toggleSort},"Nombre"),__gh(SortTh,{sortKey:"direccion",sort,onSort:toggleSort},"Direcci\xF3n"),__gh(SortTh,{sortKey:"pais",sort,onSort:toggleSort},"Pa\xEDs"),__gh(SortTh,{sortKey:"huespedes",sort,onSort:toggleSort,r:!0},"Hu\xE9sp."),__gh(SortTh,{sortKey:"propiedad_nickname",sort,onSort:toggleSort},"Propiedad"),__gh(SortTh,{sortKey:"confirmation_code",sort,onSort:toggleSort},"C\xF3d."))),__gh("tbody",{"data-gufi-src":"hostel.tsx:676"},sorted.map(v=>__gh("tr",{key:v.id,"data-gufi-src":"hostel.tsx:678"},__gh(Td,{b:!0},fmtDate(v.check_in)),__gh(Td,null,fmtDate(v.check_out)),__gh(Td,null,__gh("span",{style:{color:B.faint},"data-gufi-src":"hostel.tsx:678"},v.documento||"\u2014")),__gh(Td,null,v.nombre||"\u2014"),__gh(Td,null,v.direccion||"\u2014"),__gh(Td,null,v.pais||"\u2014"),__gh(Td,{r:!0},num(v.huespedes)),__gh(Td,null,unidadDe(v.propiedad_nickname)),__gh(Td,null,v.confirmation_code||"\u2014")))))):__gh("div",{className:"b-card","data-gufi-src":"hostel.tsx:653"},__gh(Empty,{text:"No hay viajeros para esta selecci\xF3n."})))}function Calendario2({api,token,propiedadIds}){let[cursor,setCursor]=(0,import_react15.useState)(()=>{let d2=new Date;return{y:d2.getFullYear(),m:d2.getMonth()+1}}),[data,setData]=(0,import_react15.useState)({propiedades:[],dias:[]}),[loading,setLoading]=(0,import_react15.useState)(!1),movil=useIsMobile(),lastDay=new Date(cursor.y,cursor.m,0).getDate(),monthFrom=`${cursor.y}-${String(cursor.m).padStart(2,"0")}-01`,monthTo=`${cursor.y}-${String(cursor.m).padStart(2,"0")}-${String(lastDay).padStart(2,"0")}`,idsKey=(propiedadIds||[]).join(",");(0,import_react15.useEffect)(()=>{let alive=!0;setLoading(!0);let input={token,all:!0,from:monthFrom,to:monthTo};return idsKey&&(input.propiedadIds=idsKey.split(",").map(Number)),api("portal_calendar",input).then(r=>{alive&&setData(r||{propiedades:[],dias:[]})}).catch(()=>{alive&&setData({propiedades:[],dias:[]})}).finally(()=>{alive&&setLoading(!1)}),()=>{alive=!1}},[monthFrom,monthTo,token,api,idsKey]);let unidades=data.propiedades||[],byKey=(0,import_react15.useMemo)(()=>{let m={};return(data.dias||[]).forEach(d2=>{let day=(d2.fecha||"").slice(0,10);d2.propiedad!=null&&(m[`${d2.propiedad}|${day}`]=d2),d2.propiedad_nickname&&(m[`n:${d2.propiedad_nickname}|${day}`]=d2)}),m},[data]),days=[];for(let d2=1;d2<=lastDay;d2++)days.push(d2);let dia=d2=>`${cursor.y}-${String(cursor.m).padStart(2,"0")}-${String(d2).padStart(2,"0")}`,infoDe=(p,d2)=>byKey[`${p.id}|${dia(d2)}`]||byKey[`n:${p.nickname}|${dia(d2)}`]||null,isWE=d2=>{let dow=new Date(cursor.y,cursor.m-1,d2).getDay();return dow===0||dow===6};function move(d2){let m=cursor.m+d2,y=cursor.y;m<1&&(m=12,y--),m>12&&(m=1,y++),setCursor({y,m})}let filas=(0,import_react15.useMemo)(()=>{if(!unidades.length)return[];if(unidades.filter(p=>habitacionDe(p.nickname)).length!==unidades.length||unidades.length<2)return unidades.map(p=>({clave:`u${p.id}`,nombre:unidadDe(p.nickname),unidades:[p]}));let m={};return unidades.forEach(p=>{let h=habitacionDe(p.nickname);(m[h]=m[h]||[]).push(p)}),Object.entries(m).sort((a,b)=>a[0].localeCompare(b[0],"es",{numeric:!0})).map(([h,ps])=>({clave:h,nombre:h,unidades:ps}))},[unidades]),agrupado=filas.length>0&&filas[0].unidades.length>1,mesPasado=new Date(cursor.y,cursor.m,0)move(-1),className:"b-press flex h-9 w-9 items-center justify-center rounded-xl",style:{background:"#fff",boxShadow:`inset 0 0 0 1px ${B.hair}`,border:"none",cursor:"pointer"},"data-gufi-src":"hostel.tsx:759"},__gh(import_lucide_react15.ChevronLeft,{size:18})),__gh("div",{className:"text-[15px] font-bold text-center",style:{color:B.ink,minWidth:132},"data-gufi-src":"hostel.tsx:760"},MES[cursor.m]," ",cursor.y),__gh("button",{onClick:()=>move(1),className:"b-press flex h-9 w-9 items-center justify-center rounded-xl",style:{background:"#fff",boxShadow:`inset 0 0 0 1px ${B.hair}`,border:"none",cursor:"pointer"},"data-gufi-src":"hostel.tsx:761"},__gh(import_lucide_react15.ChevronRight,{size:18})))),mesPasado?__gh("div",{className:"mb-4 rounded-xl px-4 py-2.5 text-[12.5px]",style:{background:`${B.amber}12`,color:"#8a5a00",boxShadow:`inset 0 0 0 1px ${B.amber}33`},"data-gufi-src":"hostel.tsx:765"},"Este mes ya pas\xF3. El canal libera los d\xEDas en cuanto el hu\xE9sped se va, as\xED que aqu\xED se ver\xE1n como disponibles. Lo que de verdad se ocup\xF3 est\xE1 en ",__gh("b",{"data-gufi-src":"hostel.tsx:767"},"D\xEDa a d\xEDa"),"."):null,loading?__gh(Spin,null):filas.length?__gh(__gf,null,__gh("div",{className:"overflow-x-auto","data-gufi-src":"hostel.tsx:772"},__gh("div",{style:{display:"grid",gridTemplateColumns:`${anchoNombre}px repeat(${lastDay}, ${anchoDia}px)`,gap:2,minWidth:"min-content"},"data-gufi-src":"hostel.tsx:773"},__gh("div",{style:{position:"sticky",left:0,zIndex:2,background:"#fff"},"data-gufi-src":"hostel.tsx:774"}),days.map(d2=>__gh("div",{key:`h${d2}`,className:"text-center text-[10px] font-bold",style:{color:isWE(d2)?B.accent:B.faint,paddingBottom:4},"data-gufi-src":"hostel.tsx:775"},d2)),filas.flatMap(f=>{let total=f.unidades.length,cells=[__gh("div",{key:`n${f.clave}`,className:"text-[12px] font-medium truncate pr-2 flex items-center",style:{position:"sticky",left:0,zIndex:1,background:"#fff",color:B.ink,boxShadow:`1px 0 0 ${B.hair}`},title:f.nombre,"data-gufi-src":"hostel.tsx:778"},f.nombre)];return days.forEach(d2=>{let ocupadas=0,bloqueadas=0,conocidas=0;f.unidades.forEach(p2=>{let info=infoDe(p2,d2);info&&(conocidas++,info.estado==="booked"?ocupadas++:info.estado==="blocked"&&bloqueadas++)});let p=conocidas?ocupadas/total*100:null,libres=total-ocupadas-bloqueadas,titulo=conocidas?`${f.nombre} \xB7 ${d2}/${cursor.m} \xB7 ${ocupadas} de ${total} ocupadas${bloqueadas?`, ${bloqueadas} bloqueadas`:""} \xB7 ${libres} libre${libres===1?"":"s"}`:`${f.nombre} \xB7 ${d2}/${cursor.m} \xB7 sin datos`;cells.push(__gh("div",{key:`c${f.clave}-${d2}`,title:titulo,style:{height:26,borderRadius:5,background:conocidas?fondoOcup(p):"#f4f0f0",display:"flex",alignItems:"center",justifyContent:"center"},"data-gufi-src":"hostel.tsx:788"},agrupado&&conocidas?__gh("span",{className:"b-num",style:{fontSize:9.5,fontWeight:700,color:tintaOcup(p)},"data-gufi-src":"hostel.tsx:790"},ocupadas):null))}),cells}))),__gh("div",{className:"flex flex-wrap gap-4 mt-4 text-[12px]",style:{color:B.muted},"data-gufi-src":"hostel.tsx:798"},agrupado?__gh("span",{className:"flex items-center gap-2","data-gufi-src":"hostel.tsx:800"},"Camas ocupadas de la habitaci\xF3n: ",[0,25,50,75,100].map(v=>__gh("span",{key:v,className:"rounded",style:{width:16,height:11,background:fondoOcup(v)},"data-gufi-src":"hostel.tsx:800"})),__gh("span",{style:{color:B.faint},"data-gufi-src":"hostel.tsx:800"},"vac\xEDa \u2192 llena")):__gh(__gf,null,__gh("span",{className:"flex items-center gap-1.5","data-gufi-src":"hostel.tsx:803"},__gh("span",{className:"rounded",style:{width:12,height:12,background:fondoOcup(0)},"data-gufi-src":"hostel.tsx:803"}),"Libre"),__gh("span",{className:"flex items-center gap-1.5","data-gufi-src":"hostel.tsx:804"},__gh("span",{className:"rounded",style:{width:12,height:12,background:fondoOcup(100)},"data-gufi-src":"hostel.tsx:804"}),"Ocupada")))):__gh(Empty,{text:"No hay propiedades en esta selecci\xF3n."}))}var PESTANAS=[["informe","Informe de gesti\xF3n"],["dia","D\xEDa a d\xEDa"],["reservas","Reservas y cobros"],["banco","Cuenta del hostal"],["calendario","Disponibilidad"],["viajeros","Viajeros"],["datos","Tus datos"]];function AreaHostel({api,token}){let[me,setMe]=(0,import_react15.useState)(null),[error,setError]=(0,import_react15.useState)("");return(0,import_react15.useEffect)(()=>{let vivo=!0;return api("portal_me",{token}).then(r=>{vivo&&setMe(r)}).catch(e=>{vivo&&setError(String(e&&e.message||e))}),()=>{vivo=!1}},[api,token]),error?__gh(Empty,{text:`No se pudo abrir el \xE1rea del hostal: ${error}`}):me?__gh(Hostel,{api,token,me}):__gh(Spin,null)}function Hostel({api,token,me}){let[tab,setTab]=(0,import_react15.useState)("informe"),propiedades=me&&me.propiedades||[],ownerName=me&&me.propietario?me.propietario.nombre:"",[sel,setSel]=(0,import_react15.useState)("all"),[year,setYear]=(0,import_react15.useState)(String(new Date().getFullYear())),propiedadIds=(0,import_react15.useMemo)(()=>unidadesDe(propiedades,sel),[propiedades,sel]),ambito=(0,import_react15.useMemo)(()=>nombreDeSeleccion(propiedades,sel),[propiedades,sel]),idsKey=propiedadIds.join(","),scope=(0,import_react15.useMemo)(()=>idsKey?{propiedadIds:idsKey.split(",").map(Number)}:{},[idsKey]),from=`${year}-01-01`,to=`${year}-12-31`,years=(0,import_react15.useMemo)(()=>{let y=new Date().getFullYear();return[y+1,y,y-1,y-2].map(String)},[]),[resData,setResData]=(0,import_react15.useState)(null),[resLoading,setResLoading]=(0,import_react15.useState)(!0),[txData,setTxData]=(0,import_react15.useState)(null),[vjData,setVjData]=(0,import_react15.useState)(null),[vjLoading,setVjLoading]=(0,import_react15.useState)(!1),[cocData,setCocData]=(0,import_react15.useState)(null),[facData,setFacData]=(0,import_react15.useState)(null),reloadFacturas=(0,import_react15.useCallback)(()=>api("portal_facturas",{token}).then(setFacData).catch(()=>setFacData({facturas:[],series:[]})),[token,api]),reloadTx=(0,import_react15.useCallback)(()=>{api("portal_transacciones",{token,...scope,from,to}).then(setTxData).catch(()=>{})},[scope,from,to,token,api]);(0,import_react15.useEffect)(()=>{if(tab!=="reservas")return;let a=!0;return setResLoading(!0),api("portal_reservas",{token,...scope,from,to}).then(r=>{a&&setResData(r)}).catch(()=>{a&&setResData({reservas:[],por_mes:[]})}).finally(()=>{a&&setResLoading(!1)}),()=>{a=!1}},[tab,scope,from,to,token,api]),(0,import_react15.useEffect)(()=>{if(tab!=="reservas")return;let a=!0;return api("portal_transacciones",{token,...scope,from,to}).then(r=>{a&&setTxData(r)}).catch(()=>{a&&setTxData({transacciones:[],resumen:[]})}),()=>{a=!1}},[tab,scope,from,to,token,api]),(0,import_react15.useEffect)(()=>{if(tab!=="viajeros")return;let a=!0;return setVjLoading(!0),api("portal_guest_report",{token,...scope,from,to}).then(r=>{a&&setVjData(r)}).catch(()=>{a&&setVjData({viajeros:[]})}).finally(()=>{a&&setVjLoading(!1)}),()=>{a=!1}},[tab,scope,from,to,token,api]),(0,import_react15.useEffect)(()=>{tab==="reservas"&&reloadFacturas()},[tab,reloadFacturas]),(0,import_react15.useEffect)(()=>{if(tab!=="reservas")return;let a=!0;return api("portal_conciliacion",{token}).then(r=>{a&&setCocData(r)}).catch(()=>{a&&setCocData({cuentas:[],props:[],ingresos:[],totales:{}})}),()=>{a=!1}},[tab,token,api]);let conAnio=tab==="reservas"||tab==="viajeros";return __gh("div",{className:"b-root","data-gufi-src":"hostel.tsx:869"},__gh(Tabs,{value:tab,onChange:setTab,options:PESTANAS}),tab!=="banco"&&tab!=="datos"?__gh(Selector,{propiedades,sel,setSel,year,setYear,years,conAnio}):null,tab==="informe"&&__gh(Informe,{api,token,propiedadIds,ambito,ownerName}),tab==="dia"&&__gh(Ocupacion,{api,token,propiedadIds,ambito}),tab==="reservas"&&__gh(ReservasTab,{resData,txData,cocData,facData,resLoading,ownerName,api,token,onEmitida:reloadFacturas,onCobros:reloadTx,year,propiedadIds}),tab==="banco"&&__gh(Banco,{api,token}),tab==="calendario"&&__gh(Calendario2,{api,token,propiedadIds}),tab==="viajeros"&&__gh(Viajeros,{data:vjData,loading:vjLoading}),tab==="datos"&&__gh(Datos,{api,token}))}var import_react16=require("react"),import_lucide_react16=require("lucide-react");function Copiar2({texto,etiqueta}){let[estado,setEstado]=(0,import_react16.useState)("");async function copiar(){try{await navigator.clipboard.writeText(texto),setEstado("ok"),setTimeout(()=>setEstado(""),1800)}catch{setEstado("No se ha podido copiar: selecci\xF3nalo y c\xF3pialo a mano.")}}return __gh("span",{style:{display:"inline-flex",flexDirection:"column",alignItems:"flex-start",gap:4},"data-gufi-src":"cuentas.tsx:24"},__gh("button",{className:"p-btn p-btn-s",onClick:copiar,"data-gufi-src":"cuentas.tsx:25"},estado==="ok"?__gh(__gf,null,__gh(import_lucide_react16.Check,{size:13}),"Copiado"):__gh(__gf,null,__gh(import_lucide_react16.Copy,{size:13}),etiqueta)),estado&&estado!=="ok"?__gh("span",{style:{fontSize:12,color:B.red},"data-gufi-src":"cuentas.tsx:26"},estado):null)}function ClaveNueva({r,portal,onClose}){let nombre=marca().nombre,que=deFactura()?"lo que te hemos facturado":"las reservas de tus pisos, lo que dejan y c\xF3mo va la ocupaci\xF3n",mensaje=`Hola${r.nombre?" "+r.nombre:""}: Ya tienes acceso a tu \xE1rea de propietario de ${nombre}: ${que} y, si vendemos o alquilamos alguno de tus pisos, cu\xE1nta gente pregunta y c\xF3mo van las visitas. ${portal||"[falta la direcci\xF3n del portal: par\xE1metro PORTAL_PROPIETARIOS_URL]"} Usuario: ${r.email} Contrase\xF1a: ${r.password} Un saludo, ${nombre}`;return __gh(Hoja,{titulo:r.creada?"Cuenta nueva":"Contrase\xF1a nueva",sub:r.nombre||r.email,onClose},__gh("div",{style:{borderRadius:14,background:"#f5f5f7",padding:"16px 16px 14px"},"data-gufi-src":"cuentas.tsx:39"},__gh("div",{style:{fontSize:12,color:B.muted},"data-gufi-src":"cuentas.tsx:40"},"Usuario"),__gh("div",{style:{fontSize:15,fontWeight:600,color:B.ink,marginTop:2,wordBreak:"break-all"},"data-gufi-src":"cuentas.tsx:41"},r.email),__gh("div",{style:{fontSize:12,color:B.muted,marginTop:12},"data-gufi-src":"cuentas.tsx:42"},"Contrase\xF1a"),__gh("div",{className:"b-num",style:{fontSize:24,fontWeight:600,letterSpacing:".02em",color:B.ink,marginTop:2,userSelect:"all"},"data-gufi-src":"cuentas.tsx:43"},r.password),__gh("div",{style:{marginTop:12},"data-gufi-src":"cuentas.tsx:44"},__gh(Copiar2,{texto:r.password,etiqueta:"Copiar contrase\xF1a"}))),__gh("div",{style:{borderRadius:12,background:"rgba(180,83,9,.07)",color:"#8a4b0f",fontSize:13,lineHeight:1.5,padding:"10px 13px",marginTop:12},"data-gufi-src":"cuentas.tsx:46"},"Ap\xFAntala o env\xEDala ahora: no se guarda en claro y no se podr\xE1 volver a ver. Si se pierde, se genera otra.",r.sesiones_cerradas?` Se han cerrado ${num(r.sesiones_cerradas)} sesi\xF3n${r.sesiones_cerradas===1?"":"es"} abierta${r.sesiones_cerradas===1?"":"s"} de esta cuenta.`:""),__gh("div",{className:"p-sec","data-gufi-src":"cuentas.tsx:50"},"Mensaje para mandar"),__gh("pre",{style:{whiteSpace:"pre-wrap",fontFamily:"inherit",fontSize:13.5,lineHeight:1.55,color:B.ink,background:"#fff",border:`1px solid ${B.hair}`,borderRadius:12,padding:"12px 14px",margin:0,userSelect:"all"},"data-gufi-src":"cuentas.tsx:51"},mensaje),__gh("div",{style:{marginTop:10},"data-gufi-src":"cuentas.tsx:52"},__gh(Copiar2,{texto:mensaje,etiqueta:"Copiar mensaje"})))}var cuando=s=>s?`${fmtLarga(s)} \xB7 ${s.slice(11,16)}`:null;function Cuentas({api,token,verComo}){let movil=useIsMobile(900),[recarga,setRecarga]=(0,import_react16.useState)(0),f=useScript(api,"portal_cuentas",{token,accion:"lista",recarga},!0),[q,setQ]=(0,import_react16.useState)(""),[filtro,setFiltro]=(0,import_react16.useState)("todas"),[confirmar,setConfirmar]=(0,import_react16.useState)(""),[ocupado,setOcupado]=(0,import_react16.useState)(""),[error,setError]=(0,import_react16.useState)(""),[clave,setClave]=(0,import_react16.useState)(null),{orden,th,flecha}=useOrden(null),cuentas=f.datos&&f.datos.cuentas||[],norm=s=>String(s||"").normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase(),filas=(0,import_react16.useMemo)(()=>{let n=norm(q),vis=cuentas.filter(c=>(filtro==="todas"||filtro==="entrado"&&c.ultimo_login||filtro==="nunca"&&!c.ultimo_login&&c.activo||filtro==="desactivadas"&&!c.activo)&&(!n||norm(`${c.nombre} ${c.email} ${(c.establecimientos||[]).join(" ")}`).includes(n)));return ordenar(vis,orden,{nombre:c=>c.nombre||c.email,pisos:c=>c.pisos,acceso:c=>c.ultimo_login})},[cuentas,q,filtro,orden]),pedir=k=>confirmar!==k?(setConfirmar(k),setTimeout(()=>setConfirmar(c=>c===k?"":c),4e3),!1):(setConfirmar(""),!0);async function hacer(c,accion){let k=`${accion}:${c.id}`;if(!((accion==="nueva_clave"||accion==="activar"&&c.activo)&&!pedir(k))){setOcupado(k),setError("");try{if(accion==="nueva_clave"&&setClave(await api("portal_cuentas",{token,accion,propietarioId:c.id})),accion==="activar"&&(await api("portal_cuentas",{token,accion,propietarioId:c.id,activo:!c.activo}),setRecarga(n=>n+1)),accion==="ver_como"){let r=await api("portal_cuentas",{token,accion,propietarioId:c.id});verComo(r)}accion==="crear"&&setClave(await api("portal_cuentas",{token,accion,email:c.email}))}catch(e){setError(`${c.nombre||c.email}: ${String(e&&e.message||e)}`)}setOcupado("")}}if(f.error)return __gh("div",{className:"p-card","data-gufi-src":"cuentas.tsx:95"},__gh(Vacio,{titulo:"No se han podido cargar las cuentas",texto:f.error}));if(f.cargando&&!f.datos)return __gh("div",{className:"p-card",style:{padding:70,display:"flex",justifyContent:"center"},"data-gufi-src":"cuentas.tsx:96"},__gh(import_lucide_react16.Loader2,{className:"animate-spin",style:{color:B.accent}}));let entraron=cuentas.filter(c=>c.ultimo_login).length,sinCuenta=f.datos&&f.datos.sin_cuenta||[],desactivadas=cuentas.filter(c=>!c.activo).length,boton=(c,accion,contenido,peligro)=>{let k=`${accion}:${c.id}`,pide=confirmar===k;return __gh("button",{className:"p-btn p-btn-s",disabled:!!ocupado,onClick:()=>hacer(c,accion),style:pide?{background:peligro?B.red:B.accent,borderColor:peligro?B.red:B.accent,color:"#fff"}:void 0,"data-gufi-src":"cuentas.tsx:105"},ocupado===k?__gh(import_lucide_react16.Loader2,{size:13,className:"animate-spin"}):pide?"\xBFSeguro?":contenido)};return __gh("div",{className:"p-grid","data-gufi-src":"cuentas.tsx:113"},__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"cuentas.tsx:114"},__gh("div",{className:"p-stats","data-gufi-src":"cuentas.tsx:115"},__gh(Cifra,{l:"Cuentas",v:num(cuentas.length),s:"una por correo de propietario"}),__gh(Cifra,{l:"Han entrado",v:num(entraron),s:"alguna vez"}),__gh(Cifra,{l:"Nunca han entrado",v:num(cuentas.length-entraron-cuentas.filter(c=>!c.activo&&!c.ultimo_login).length),s:"activas y sin estrenar"}),__gh(Cifra,{l:"Desactivadas",v:num(desactivadas)}))),__gh("p",{className:"p-note",style:{lineHeight:1.5},"data-gufi-src":"cuentas.tsx:123"},"Las contrase\xF1as no se pueden ver, de nadie: se guardan cifradas. Para darle acceso a un propietario, genera una nueva y m\xE1ndasela; la vieja deja de valer y se cierran sus sesiones abiertas.",f.datos&&f.datos.anuncios_sin_correo?` Hay ${num(f.datos.anuncios_sin_correo)} anuncios sin correo de propietario en su ficha: no entran en ninguna cuenta.`:""),__gh("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:8},"data-gufi-src":"cuentas.tsx:128"},__gh("label",{className:"p-pill",style:{cursor:"text",minWidth:240,flex:movil?"1 1 100%":"0 1 340px"},"data-gufi-src":"cuentas.tsx:129"},__gh(import_lucide_react16.Search,{size:15,style:{color:B.faint}}),__gh("input",{value:q,onChange:e=>setQ(e.target.value),placeholder:"Buscar propietario, correo o establecimiento",style:{border:"none",outline:"none",background:"transparent",fontSize:13.5,flex:1,minWidth:0,color:B.ink},"data-gufi-src":"cuentas.tsx:131"})),__gh("div",{className:"p-seg","data-gufi-src":"cuentas.tsx:133"},[["todas","Todas"],["entrado","Han entrado"],["nunca","Nunca"],["desactivadas","Desactivadas"]].map(([k,l])=>__gh("button",{key:k,"data-on":filtro===k?"1":"0",onClick:()=>setFiltro(k),"data-gufi-src":"cuentas.tsx:134"},l)))),error?__gh("div",{className:"p-note",style:{color:B.red},"data-gufi-src":"cuentas.tsx:137"},error):null,sinCuenta.length?__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"cuentas.tsx:140"},__gh("div",{className:"p-card-h","data-gufi-src":"cuentas.tsx:141"},__gh("div",{"data-gufi-src":"cuentas.tsx:141"},__gh("h3",{"data-gufi-src":"cuentas.tsx:141"},"Sin cuenta todav\xEDa"),__gh("p",{"data-gufi-src":"cuentas.tsx:141"},"Su correo est\xE1 en la ficha de alg\xFAn piso, pero no pueden entrar hasta que se les cree la cuenta."))),__gh("div",{style:{padding:"10px 20px 6px"},"data-gufi-src":"cuentas.tsx:142"},sinCuenta.map((c,k)=>__gh("div",{key:c.email,style:{display:"flex",alignItems:"center",gap:12,flexWrap:"wrap",padding:"10px 0",borderTop:k?`1px solid ${B.hair}`:"none"},"data-gufi-src":"cuentas.tsx:144"},__gh("div",{style:{flex:"1 1 260px",minWidth:0},"data-gufi-src":"cuentas.tsx:145"},__gh("div",{style:{fontWeight:600,color:B.ink,overflowWrap:"anywhere"},"data-gufi-src":"cuentas.tsx:146"},c.nombre||c.email),__gh("div",{style:{fontSize:12.5,color:B.muted,overflowWrap:"anywhere"},"data-gufi-src":"cuentas.tsx:147"},c.nombre?`${c.email} \xB7 `:"",(c.fichas||[]).join(", "))),boton({id:c.email,email:c.email,nombre:c.nombre},"crear",__gh(__gf,null,__gh(import_lucide_react16.KeyRound,{size:13}),"Crear cuenta"),!1))))):null,__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"cuentas.tsx:156"},filas.length?__gh("div",{style:{overflowX:"auto"},"data-gufi-src":"cuentas.tsx:158"},__gh("table",{className:"p-table",style:{minWidth:920},"data-gufi-src":"cuentas.tsx:159"},__gh("thead",{"data-gufi-src":"cuentas.tsx:160"},__gh("tr",{"data-gufi-src":"cuentas.tsx:160"},__gh("th",{...th("nombre"),"data-gufi-src":"cuentas.tsx:161"},"Propietario",flecha("nombre")),__gh("th",{"data-r":"1",...th("pisos"),"data-gufi-src":"cuentas.tsx:162"},"Pisos",flecha("pisos")),__gh("th",{...th("acceso"),"data-gufi-src":"cuentas.tsx:163"},"\xDAltimo acceso",flecha("acceso")),__gh("th",{"data-gufi-src":"cuentas.tsx:164"},"Estado"),__gh("th",{"data-r":"1","data-gufi-src":"cuentas.tsx:165"},"Acciones"))),__gh("tbody",{"data-gufi-src":"cuentas.tsx:167"},filas.map(c=>__gh("tr",{key:c.id,"data-gufi-src":"cuentas.tsx:169"},__gh("td",{style:{maxWidth:340,overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"cuentas.tsx:170"},__gh("div",{style:{fontWeight:600,color:c.activo?B.ink:B.muted,overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"cuentas.tsx:171"},c.nombre||"\u2014"),__gh("div",{style:{fontSize:12.5,color:B.muted,overflow:"hidden",textOverflow:"ellipsis"},"data-gufi-src":"cuentas.tsx:172"},c.email)),__gh("td",{"data-r":"1","data-gufi-src":"cuentas.tsx:174"},__gh("div",{"data-gufi-src":"cuentas.tsx:175"},num(c.pisos)),(c.establecimientos||[]).length?__gh("div",{style:{fontSize:12,color:B.faint},"data-gufi-src":"cuentas.tsx:176"},c.establecimientos.join(", ")):c.anuncios!==c.pisos?__gh("div",{style:{fontSize:12,color:B.faint},"data-gufi-src":"cuentas.tsx:176"},num(c.anuncios)," anuncios"):null),__gh("td",{style:{color:c.ultimo_login?B.ink:B.faint},"data-gufi-src":"cuentas.tsx:178"},cuando(c.ultimo_login)||"Nunca"),__gh("td",{"data-gufi-src":"cuentas.tsx:179"},__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:7,flexWrap:"wrap"},"data-gufi-src":"cuentas.tsx:180"},__gh("span",{className:"p-dot",style:{background:c.activo?B.green:B.faint},"data-gufi-src":"cuentas.tsx:181"}),c.activo?"Activa":"Desactivada",c.maestro?__gh("span",{className:"b-pill",style:{color:B.accent,background:"rgba(29,29,31,.07)",padding:"3px 8px"},"data-gufi-src":"cuentas.tsx:182"},"Maestra"):null,c.sesiones?__gh("span",{style:{fontSize:12,color:B.muted},"data-gufi-src":"cuentas.tsx:183"},"\xB7 ",num(c.sesiones)," sesi\xF3n",c.sesiones===1?"":"es"):null)),__gh("td",{"data-r":"1","data-gufi-src":"cuentas.tsx:186"},__gh("span",{style:{display:"inline-flex",gap:6,justifyContent:"flex-end"},"data-gufi-src":"cuentas.tsx:187"},!c.maestro&&c.activo?boton(c,"ver_como",__gh(__gf,null,__gh(import_lucide_react16.Eye,{size:13}),"Ver como"),!1):null,boton(c,"nueva_clave",__gh(__gf,null,__gh(import_lucide_react16.KeyRound,{size:13}),"Contrase\xF1a nueva"),!1),c.maestro?null:boton(c,"activar",c.activo?"Desactivar":"Activar",c.activo)))))))):__gh(Vacio,{titulo:"Ninguna cuenta coincide",texto:"Prueba con otro nombre o quita el filtro."})),clave?__gh(ClaveNueva,{r:clave,portal:f.datos&&f.datos.portal,onClose:()=>{setClave(null),setRecarga(n=>n+1)}}):null)}var import_react17=require("react"),import_lucide_react17=require("lucide-react");var NEGOCIO={venta:"En venta",alquiler:"En alquiler",ambas:"En venta y en alquiler"},MES2=["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],DIA2=["domingo","lunes","martes","mi\xE9rcoles","jueves","viernes","s\xE1bado"],TANDA=12,d=s=>new Date(s+"T12:00:00Z"),masDias=(s,n)=>{let x=d(s);return x.setUTCDate(x.getUTCDate()+n),x.toISOString().slice(0,10)};function rango(desde){let a=d(desde),b=d(masDias(desde,6));return a.getUTCMonth()===b.getUTCMonth()?`del ${a.getUTCDate()} al ${b.getUTCDate()} de ${MES2[b.getUTCMonth()]}`:`del ${a.getUTCDate()} de ${MES2[a.getUTCMonth()]} al ${b.getUTCDate()} de ${MES2[b.getUTCMonth()]}`}var corto=s=>`${d(s).getUTCDate()} ${MES2[d(s).getUTCMonth()].slice(0,3)}`,diaVisita=v=>{let x=d(v.dia),t=`${DIA2[x.getUTCDay()]} ${x.getUTCDate()} de ${MES2[x.getUTCMonth()]}`;return t.charAt(0).toUpperCase()+t.slice(1)+(v.hora?`, ${v.hora}`:"")},eur=n=>`${String(Math.round(Number(n))).replace(/\B(?=(\d{3})+(?!\d))/g,".")} \u20AC`,precioDe=p=>[p.precio_venta?eur(p.precio_venta):null,p.precio_alquiler?`${eur(p.precio_alquiler)} al mes`:null].filter(Boolean).join(" \xB7 "),sumar2=(ss,k)=>ss.reduce((a,s)=>a+s[k],0);function Semanas2({semanas}){let max=Math.max(1,...semanas.map(s=>Math.max(s.contactos,s.visitas))),ALTO=64;return __gh("div",{style:{padding:"16px 20px 18px"},"data-gufi-src":"comercial.tsx:43"},__gh("div",{style:{display:"flex",alignItems:"flex-end",gap:8,height:ALTO+40},"data-gufi-src":"comercial.tsx:44"},semanas.map((s,k)=>{let ultima=k===semanas.length-1;return __gh("div",{key:s.desde,title:`Semana ${rango(s.desde)}: ${s.contactos} ${s.contactos===1?"contacto":"contactos"} y ${s.visitas} ${s.visitas===1?"visita":"visitas"}`,style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"flex-end",height:"100%"},"data-gufi-src":"comercial.tsx:48"},__gh("div",{style:{display:"flex",alignItems:"flex-end",gap:3,height:ALTO},"data-gufi-src":"comercial.tsx:50"},__gh("div",{style:{width:9,height:s.contactos?Math.max(4,s.contactos/max*ALTO):2,borderRadius:3,background:s.contactos?B.accent:B.hair},"data-gufi-src":"comercial.tsx:51"}),__gh("div",{style:{width:9,height:s.visitas?Math.max(4,s.visitas/max*ALTO):2,borderRadius:3,background:s.visitas?B.gold:B.hair},"data-gufi-src":"comercial.tsx:52"})),__gh("div",{className:"b-num",style:{fontSize:11,color:ultima?B.ink:B.faint,fontWeight:ultima?600:400,marginTop:7,whiteSpace:"nowrap"},"data-gufi-src":"comercial.tsx:54"},ultima?"Esta":corto(s.desde)))})),__gh("div",{className:"p-note",style:{gap:14,marginTop:4,flexWrap:"wrap"},"data-gufi-src":"comercial.tsx:59"},__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:6},"data-gufi-src":"comercial.tsx:60"},__gh("span",{className:"p-dot",style:{background:B.accent},"data-gufi-src":"comercial.tsx:60"}),"Contactos"),__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:6},"data-gufi-src":"comercial.tsx:61"},__gh("span",{className:"p-dot",style:{background:B.gold},"data-gufi-src":"comercial.tsx:61"}),"Visitas"),__gh("span",{"data-gufi-src":"comercial.tsx:62"},"Semanas de lunes a domingo")))}function Piso({p}){let s=p.semanas[p.semanas.length-1],vias=[s.idealista?`${s.idealista} por idealista`:null,s.web?`${s.web} por nuestra web`:null].filter(Boolean).join(" y "),precio=precioDe(p),enWeb=p.anunciado.web,enIdealista=p.anunciado.idealista;return __gh("div",{className:"p-card",style:{overflow:"hidden",minWidth:0},"data-gufi-src":"comercial.tsx:75"},__gh("div",{className:"p-card-h",style:{flexWrap:"wrap",alignItems:"flex-start"},"data-gufi-src":"comercial.tsx:76"},__gh("div",{style:{minWidth:0},"data-gufi-src":"comercial.tsx:77"},__gh("h3",{"data-gufi-src":"comercial.tsx:78"},p.nombre),__gh("p",{"data-gufi-src":"comercial.tsx:79"},NEGOCIO[p.negocio],precio?` por ${precio}`:"")),__gh("div",{style:{display:"flex",gap:14,flexWrap:"wrap",fontSize:13},"data-gufi-src":"comercial.tsx:81"},enIdealista.map(a=>__gh("a",{key:a.url,href:a.url,target:"_blank",rel:"noreferrer",style:{display:"inline-flex",alignItems:"center",gap:6,color:B.accent,textDecoration:"none",fontWeight:600},"data-gufi-src":"comercial.tsx:83"},__gh("span",{className:"p-dot",style:{background:B.green,width:7,height:7},"data-gufi-src":"comercial.tsx:84"}),"idealista",enIdealista.length>1?` \xB7 ${a.operacion}`:"",__gh(import_lucide_react17.ArrowUpRight,{size:13}))),enWeb?__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:6,color:B.sub},"data-gufi-src":"comercial.tsx:87"},__gh("span",{className:"p-dot",style:{background:B.green,width:7,height:7},"data-gufi-src":"comercial.tsx:87"}),"En nuestra web"):null,!enWeb&&!enIdealista.length?__gh("span",{style:{display:"inline-flex",alignItems:"center",gap:6,color:B.muted},"data-gufi-src":"comercial.tsx:88"},__gh("span",{className:"p-dot",style:{background:B.faint,width:7,height:7},"data-gufi-src":"comercial.tsx:88"}),"Sin anunciar ahora mismo"):null)),__gh("div",{className:"p-stats",style:{marginTop:14,borderTop:`1px solid ${B.hair}`},"data-gufi-src":"comercial.tsx:91"},__gh(Cifra,{l:"Han preguntado esta semana",v:num(s.contactos),s:vias||"nadie todav\xEDa"}),__gh(Cifra,{l:"Visitas esta semana",v:num(s.visitas),s:s.visitas?`${num(s.hechas)} ${s.hechas===1?"hecha":"hechas"}`:"ninguna"}),__gh(Cifra,{l:"Contactos en 8 semanas",v:num(sumar2(p.semanas,"contactos")),s:`${num(sumar2(p.semanas,"idealista"))} por idealista`}),__gh(Cifra,{l:"Visitas en 8 semanas",v:num(sumar2(p.semanas,"visitas")),s:`${num(sumar2(p.semanas,"hechas"))} hechas`})),__gh("div",{style:{borderTop:`1px solid ${B.hair}`},"data-gufi-src":"comercial.tsx:97"},__gh(Semanas2,{semanas:p.semanas})),__gh("div",{style:{borderTop:`1px solid ${B.hair}`,padding:"14px 20px 8px"},"data-gufi-src":"comercial.tsx:98"},__gh("div",{style:{fontSize:13.5,fontWeight:600,color:B.ink},"data-gufi-src":"comercial.tsx:99"},"Visitas"),p.visitas.length?p.visitas.map((v,k)=>__gh("div",{key:k,style:{padding:"10px 0",borderTop:k?`1px solid ${B.hair}`:"none",display:"flex",gap:14,flexWrap:"wrap"},"data-gufi-src":"comercial.tsx:101"},__gh("div",{className:"b-num",style:{fontSize:13.5,color:B.ink,minWidth:190},"data-gufi-src":"comercial.tsx:102"},diaVisita(v)),__gh("div",{style:{flex:"1 1 260px",minWidth:0,fontSize:13.5,color:B.sub,lineHeight:1.45},"data-gufi-src":"comercial.tsx:103"},[v.estado==="Realizada"?null:String(v.estado||"").toLowerCase(),v.interes?`inter\xE9s ${v.interes.toLowerCase()}`:null].filter(Boolean).join(", ").replace(/^./,c=>c.toUpperCase()),v.comentario?__gh("span",{style:{color:B.ink},"data-gufi-src":"comercial.tsx:105"},v.estado!=="Realizada"||v.interes?". ":"",v.comentario):null,!v.comentario&&v.estado==="Realizada"&&!v.interes?"Hecha, sin comentario":null))):__gh("div",{className:"p-note",style:{padding:"8px 0 10px"},"data-gufi-src":"comercial.tsx:109"},"Ninguna en las \xFAltimas 8 semanas.")))}function Comercial({api,token,maestro}){let f=useScript(api,"portal_comercial",{token},!0),[q,setQ]=(0,import_react17.useState)(""),[ver,setVer]=(0,import_react17.useState)(TANDA),pisos=f.datos&&f.datos.pisos||[],filtrados=(0,import_react17.useMemo)(()=>{let t=q.trim().toLowerCase();return t?pisos.filter(p=>`${p.nombre} ${p.direccion||""} ${p.ciudad||""}`.toLowerCase().includes(t)):pisos},[pisos,q]);if(f.error)return __gh("div",{className:"p-card","data-gufi-src":"comercial.tsx:125"},__gh(Vacio,{titulo:"No se ha podido cargar c\xF3mo van tus pisos",texto:f.error}));if(f.cargando||!f.datos)return __gh("div",{className:"p-card",style:{padding:70,display:"flex",justifyContent:"center"},"data-gufi-src":"comercial.tsx:126"},__gh(import_lucide_react17.Loader2,{className:"animate-spin",style:{color:B.accent}}));if(!pisos.length)return __gh("div",{className:"p-card","data-gufi-src":"comercial.tsx:127"},__gh(Vacio,{titulo:"Ning\xFAn piso en venta ni en alquiler",texto:`Cuando ${marca().nombre} anuncie uno de tus pisos, aqu\xED ver\xE1s cu\xE1nta gente pregunta y c\xF3mo van las visitas.`}));let semana=f.datos.semanas[f.datos.semanas.length-1],ultima=k=>sumar2(pisos.map(p=>p.semanas[p.semanas.length-1]),k),cuantos=n=>pisos.filter(p=>p.negocio===n).length,reparto=[cuantos("venta")?`${cuantos("venta")} en venta`:null,cuantos("alquiler")?`${cuantos("alquiler")} en alquiler`:null,cuantos("ambas")?`${cuantos("ambas")} en venta y en alquiler`:null].filter(Boolean).join(", ");return __gh("div",{className:"p-grid","data-gufi-src":"comercial.tsx:135"},__gh("div",{className:"p-card",style:{overflow:"hidden"},"data-gufi-src":"comercial.tsx:136"},__gh("div",{style:{padding:"22px 24px 18px"},"data-gufi-src":"comercial.tsx:137"},__gh("div",{className:"p-note","data-gufi-src":"comercial.tsx:138"},"Esta semana, ",rango(semana.desde)),__gh("div",{style:{fontSize:"clamp(26px, 5vw, 34px)",fontWeight:600,letterSpacing:"-1px",lineHeight:1.15,marginTop:8,color:B.ink},"data-gufi-src":"comercial.tsx:139"},pisos.length===1?`Tu piso, ${NEGOCIO[pisos[0].negocio].toLowerCase()}`:`${num(pisos.length)} pisos: ${reparto}`)),__gh("div",{className:"p-stats",style:{borderTop:`1px solid ${B.hair}`},"data-gufi-src":"comercial.tsx:143"},__gh(Cifra,{l:"Han preguntado",v:num(ultima("contactos")),s:`${num(ultima("idealista"))} por idealista`}),__gh(Cifra,{l:"Visitas",v:num(ultima("visitas")),s:`${num(ultima("hechas"))} hechas`}),__gh(Cifra,{l:"Contactos en 8 semanas",v:num(pisos.reduce((a,p)=>a+sumar2(p.semanas,"contactos"),0)),s:"desde la web y desde idealista"}),__gh(Cifra,{l:"Visitas en 8 semanas",v:num(pisos.reduce((a,p)=>a+sumar2(p.semanas,"visitas"),0)),s:"hechas o previstas"}))),pisos.length>TANDA?__gh("input",{className:"b-input",style:{maxWidth:360},value:q,onChange:e=>{setQ(e.target.value),setVer(TANDA)},placeholder:maestro?"Buscar piso, calle o ciudad":"Buscar piso","data-gufi-src":"comercial.tsx:152"}):null,filtrados.slice(0,ver).map(p=>__gh(Piso,{key:p.id,p})),filtrados.length>ver?__gh("button",{className:"p-btn",style:{justifySelf:"center"},onClick:()=>setVer(n=>n+TANDA),"data-gufi-src":"comercial.tsx:156"},"Ver ",num(Math.min(TANDA,filtrados.length-ver))," m\xE1s \xB7 quedan ",num(filtrados.length-ver)):null,filtrados.length?null:__gh("div",{className:"p-card","data-gufi-src":"comercial.tsx:158"},__gh(Vacio,{titulo:"Ning\xFAn piso con ese nombre",texto:"Prueba con la calle o con la ciudad."})),__gh("p",{className:"p-note",style:{lineHeight:1.5,display:"block"},"data-gufi-src":"comercial.tsx:160"},"Han preguntado: personas que han escrito por el piso en idealista o en nuestra web; quien vuelve a escribir cuenta una vez. Visitas: las de esa semana, hechas o ya previstas, con lo que anot\xF3 quien las ense\xF1\xF3."))}function EstanciaPagina({f,id,propPorId,periodo,api,token,onVolver}){return __gh(Estado,{f,periodo,hijos:d2=>{let e=d2.estancias.find(x=>String(x.id)===String(id));return e?__gh(DetalleEstancia,{e,propPorId,onVolver,api,token}):__gh(Pagina,{titulo:"Esa estancia no es de este periodo",onVolver},__gh("div",{className:"p-note",style:{padding:"10px 0"},"data-gufi-src":"page.tsx:64"},"No aparece entre las de ",periodoTexto(periodo.desde,periodo.hasta).toLowerCase(),". Vuelve, cambia el periodo de arriba y \xE1brela otra vez."))}})}function Entrar({api,onEntrar}){let[email,setEmail]=(0,import_react18.useState)(""),[password,setPassword]=(0,import_react18.useState)(""),[enviando,setEnviando]=(0,import_react18.useState)(!1),[error,setError]=(0,import_react18.useState)("");async function enviar(e){if(e.preventDefault(),!email||!password){setError("Escribe tu correo y tu contrase\xF1a.");return}setEnviando(!0),setError("");try{let r=await api("portal_login",{email:email.trim(),password});onEntrar(r.token)}catch(ex){setError(String(ex&&ex.message||ex)),setEnviando(!1)}}return __gh("div",{className:"b-root",style:{minHeight:"100vh",background:"linear-gradient(180deg,#f5f5f7 0%,#f5f5f7 60%)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"32px 16px"},"data-gufi-src":"page.tsx:89"},__gh("style",{"data-gufi-src":"page.tsx:90"},B_CSS),__gh("div",{className:"b-rise",style:{width:"100%",maxWidth:400},"data-gufi-src":"page.tsx:91"},__gh("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",marginBottom:28},"data-gufi-src":"page.tsx:92"},__gh("div",{style:{boxShadow:"0 14px 34px -14px rgba(29,29,31,.6)",borderRadius:17},"data-gufi-src":"page.tsx:93"},__gh(Logo,{tam:64})),__gh("h1",{style:{fontSize:30,fontWeight:600,letterSpacing:"-.9px",color:B.ink,marginTop:20,lineHeight:1.1},"data-gufi-src":"page.tsx:94"},"Tu \xE1rea de propietario"),__gh("p",{style:{fontSize:15,color:B.muted,marginTop:10,lineHeight:1.5,maxWidth:330},"data-gufi-src":"page.tsx:95"},"Todo lo de tus propiedades con ",marca().nombre,", en un solo sitio.")),__gh("form",{onSubmit:enviar,className:"p-card",style:{padding:24,boxShadow:"0 24px 60px -30px rgba(0,0,0,.25)"},"data-gufi-src":"page.tsx:97"},__gh("label",{style:{fontSize:13,fontWeight:600,color:B.ink},"data-gufi-src":"page.tsx:98"},"Correo electr\xF3nico"),__gh("input",{className:"b-input",style:{marginTop:6,marginBottom:14},type:"email",autoComplete:"username",value:email,onChange:e=>setEmail(e.target.value),placeholder:"tu@correo.com","data-gufi-src":"page.tsx:99"}),__gh("label",{style:{fontSize:13,fontWeight:600,color:B.ink},"data-gufi-src":"page.tsx:100"},"Contrase\xF1a"),__gh("input",{className:"b-input",style:{marginTop:6},type:"password",autoComplete:"current-password",value:password,onChange:e=>setPassword(e.target.value),placeholder:"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022","data-gufi-src":"page.tsx:101"}),error?__gh("div",{style:{marginTop:12,borderRadius:12,padding:"10px 13px",fontSize:13,color:B.red,background:"rgba(220,38,38,.07)"},"data-gufi-src":"page.tsx:102"},error):null,__gh("button",{type:"submit",disabled:enviando,className:"p-btn p-btn-a",style:{width:"100%",height:46,borderRadius:13,fontSize:15,marginTop:18},"data-gufi-src":"page.tsx:103"},enviando?__gh(import_lucide_react18.Loader2,{size:17,className:"animate-spin"}):__gh(__gf,null,"Entrar ",__gh(import_lucide_react18.ArrowRight,{size:16})))),marca().email?__gh("p",{style:{textAlign:"center",fontSize:12.5,color:B.faint,marginTop:18},"data-gufi-src":"page.tsx:107"},"\xBFNo puedes entrar? Escribe a ",marca().email):null))}var periodoMes=ym=>({desde:ym+"-01",hasta:primeroMesSiguiente(ym)}),periodoAnio=y=>({desde:`${y}-01-01`,hasta:`${Number(y)+1}-01-01`});function FiltroPeriodo({periodo,setPeriodo,ultimoMes,primerAnio}){let[abierto,setAbierto]=(0,import_react18.useState)(!1),anioUlt=Number(ultimoMes.slice(0,4)),anios=[];for(let y=anioUlt;y>=primerAnio;y--)anios.push(y);let[anio,setAnio]=(0,import_react18.useState)(Number(periodo.desde.slice(0,4))||anioUlt),[d2,setD]=(0,import_react18.useState)(periodo.desde),[h,setH]=(0,import_react18.useState)(sumarDias(periodo.hasta,-1)),elegir=p=>{setPeriodo(p),setAbierto(!1)},on=p=>p.desde===periodo.desde&&p.hasta===periodo.hasta,mesesAnio=[];for(let m=1;m<=12;m++){let ym=`${anio}-${String(m).padStart(2,"0")}`;ym<=ultimoMes&&mesesAnio.push(ym)}let trimestres=[1,2,3,4].map(t=>({t,desde:`${anio}-${String(t*3-2).padStart(2,"0")}-01`,hasta:t===4?`${anio+1}-01-01`:`${anio}-${String(t*3+1).padStart(2,"0")}-01`})).filter(x=>x.desde.slice(0,7)<=ultimoMes),chip=activo=>({padding:"7px 11px",borderRadius:9,fontSize:13,fontWeight:activo?600:500,border:`1px solid ${activo?"rgba(29,29,31,.45)":B.hair}`,background:activo?"rgba(29,29,31,.06)":"#fff",color:activo?B.accent:B.ink,cursor:"pointer"});return __gh(Desplegable,{abierto,setAbierto,boton:__gh(Pildora,{etiqueta:"Periodo",valor:periodoTexto(periodo.desde,periodo.hasta),activa:abierto,onClick:()=>setAbierto(!abierto)})},__gh("div",{style:{padding:14,width:340,maxWidth:"88vw"},"data-gufi-src":"page.tsx:136"},__gh("button",{className:"p-opt","data-on":on(periodoMes(ultimoMes))?"1":"0",onClick:()=>elegir(periodoMes(ultimoMes)),"data-gufi-src":"page.tsx:137"},deFactura()?"\xDAltimo mes facturado":"Este mes"," ",__gh("span",{className:"s","data-gufi-src":"page.tsx:138"},mesLabel(ultimoMes))),anios.length>1?__gh("div",{className:"p-seg",style:{marginTop:10},"data-gufi-src":"page.tsx:141"},anios.map(y=>__gh("button",{key:y,"data-on":y===anio?"1":"0",onClick:()=>setAnio(y),"data-gufi-src":"page.tsx:141"},y))):null,__gh("div",{className:"p-grp",style:{paddingLeft:2},"data-gufi-src":"page.tsx:143"},"A\xF1o"),__gh("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},"data-gufi-src":"page.tsx:144"},__gh("button",{style:chip(on(periodoAnio(anio))),onClick:()=>elegir(periodoAnio(anio)),"data-gufi-src":"page.tsx:145"},"Todo ",anio),trimestres.map(x=>__gh("button",{key:x.t,style:chip(on(x)),onClick:()=>elegir({desde:x.desde,hasta:x.hasta}),"data-gufi-src":"page.tsx:146"},"T",x.t))),__gh("div",{className:"p-grp",style:{paddingLeft:2},"data-gufi-src":"page.tsx:148"},"Mes"),__gh("div",{style:{display:"grid",gridTemplateColumns:"repeat(4,1fr)",gap:6},"data-gufi-src":"page.tsx:149"},mesesAnio.map(ym=>__gh("button",{key:ym,style:chip(on(periodoMes(ym))),onClick:()=>elegir(periodoMes(ym)),"data-gufi-src":"page.tsx:150"},MES[Number(ym.slice(5))].slice(0,3)))),__gh("div",{className:"p-grp",style:{paddingLeft:2},"data-gufi-src":"page.tsx:152"},"Entre dos fechas"),__gh("div",{style:{display:"flex",gap:6,alignItems:"center"},"data-gufi-src":"page.tsx:153"},__gh("input",{type:"date",className:"b-input",style:{padding:"7px 9px",fontSize:13,borderRadius:9},value:d2,onChange:e=>setD(e.target.value),"data-gufi-src":"page.tsx:154"}),__gh("span",{style:{color:B.faint},"data-gufi-src":"page.tsx:155"},"\u2013"),__gh("input",{type:"date",className:"b-input",style:{padding:"7px 9px",fontSize:13,borderRadius:9},value:h,onChange:e=>setH(e.target.value),"data-gufi-src":"page.tsx:156"})),__gh("button",{className:"p-btn p-btn-a",style:{width:"100%",marginTop:10},disabled:!d2||!h||d2>h,onClick:()=>elegir({desde:d2,hasta:sumarDias(h,1)}),"data-gufi-src":"page.tsx:158"},"Ver estas fechas")))}function MenuCuenta({cuenta,salir,desdeGufi}){let[abierto,setAbierto]=(0,import_react18.useState)(!1);return __gh(Desplegable,{abierto,setAbierto,derecha:!0,boton:__gh("button",{onClick:()=>setAbierto(!abierto),style:{display:"flex",alignItems:"center",gap:10,background:"transparent",border:"none",cursor:"pointer",padding:4},title:cuenta.nombre,"data-gufi-src":"page.tsx:170"},__gh("span",{className:"p-only-d",style:{fontSize:13.5,color:B.sub,maxWidth:220,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},"data-gufi-src":"page.tsx:171"},cuenta.nombre),__gh("span",{style:{width:32,height:32,borderRadius:999,background:B.grad,color:"#fff",fontSize:12,fontWeight:700,display:"flex",alignItems:"center",justifyContent:"center"},"data-gufi-src":"page.tsx:172"},initials(cuenta.nombre)))},__gh("div",{style:{padding:"14px 16px",borderBottom:`1px solid ${B.hair}`,minWidth:250},"data-gufi-src":"page.tsx:175"},__gh("div",{style:{fontSize:14,fontWeight:600,color:B.ink},"data-gufi-src":"page.tsx:176"},cuenta.nombre),__gh("div",{style:{fontSize:12.5,color:B.muted,marginTop:2},"data-gufi-src":"page.tsx:177"},cuenta.email),cuenta.maestro?__gh("div",{style:{fontSize:12,color:B.accent,marginTop:8,fontWeight:600},"data-gufi-src":"page.tsx:178"},"Cuenta maestra \xB7 ve a todos los propietarios"):null,desdeGufi?__gh("div",{style:{fontSize:12,color:B.muted,marginTop:6},"data-gufi-src":"page.tsx:179"},"Has entrado desde Gufi como ",desdeGufi):null),desdeGufi?null:__gh("div",{style:{padding:6},"data-gufi-src":"page.tsx:183"},__gh("button",{className:"p-opt",onClick:()=>{setAbierto(!1),salir()},"data-gufi-src":"page.tsx:184"},__gh(import_lucide_react18.LogOut,{size:15,style:{color:B.muted}})," Cerrar sesi\xF3n")))}var SECCIONES=[{k:"resumen",t:"Resumen",icono:import_lucide_react18.LayoutGrid},{k:"reservas",t:"Reservas",icono:import_lucide_react18.BedDouble},{k:"calendario",t:"Calendario",icono:import_lucide_react18.CalendarDays},{k:"facturas",t:"Facturas",icono:import_lucide_react18.FileText,soloFactura:!0},{k:"huespedes",t:"Hu\xE9spedes",icono:import_lucide_react18.Users}],HOSTEL={k:"hostel",t:"Hostel",icono:import_lucide_react18.Building2},comercialDe=n=>({k:"comercial",t:n.venta&&n.alquiler?"Venta y alquiler":n.venta?"En venta":"En alquiler",icono:import_lucide_react18.Tag}),CUENTAS={k:"cuentas",t:"Cuentas",icono:import_lucide_react18.KeyRound},rutaDeHash=()=>{let seg=window.location.hash.replace(/^#\/?/,"").split("/").filter(Boolean);return(seg[0]==="reserva"||seg[0]==="factura")&&seg[1]?{tipo:seg[0],id:decodeURIComponent(seg[1]),mes:/^\d{4}-\d{2}$/.test(seg[2]||"")?seg[2]:""}:{tipo:"seccion",id:seg[0]||"",mes:""}},SECCION_DE={reserva:"reservas",factura:"facturas"};function Portal({api,token,inicio,salir,verComo,vista,desdeGufi}){fijarFuente(inicio.fuente);let turistico=inicio.propiedades.length>0,comercial=inicio.negocios.venta||inicio.negocios.alquiler,secciones=(turistico?SECCIONES.filter(s=>!s.soloFactura||deFactura()):[]).concat(comercial?[comercialDe(inicio.negocios)]:[],inicio.hostel?[HOSTEL]:[],inicio.cuenta.maestro?[CUENTAS]:[]),[ruta,setRuta]=(0,import_react18.useState)(rutaDeHash),seccionInicial=()=>{let r=rutaDeHash(),k=r.tipo==="seccion"?r.id:SECCION_DE[r.tipo];return secciones.some(x=>x.k===k)?k:secciones[0].k},[seccion,setSeccionEstado]=(0,import_react18.useState)(seccionInicial),setSeccion=(0,import_react18.useCallback)(k=>{setSeccionEstado(k),setRuta({tipo:"seccion",id:k,mes:""}),window.history.replaceState(null,"","#/"+k)},[]);(0,import_react18.useEffect)(()=>{let sync=()=>{let r=rutaDeHash();setRuta(r);let k=r.tipo==="seccion"?r.id:SECCION_DE[r.tipo];k&&secciones.some(x=>x.k===k)&&setSeccionEstado(k)};return window.addEventListener("hashchange",sync),()=>window.removeEventListener("hashchange",sync)},[secciones]);let irA=(0,import_react18.useCallback)((tipo,id,mes)=>{window.location.hash=`#/${tipo}/${encodeURIComponent(id)}`+(mes?`/${mes}`:"")},[]),volver=(0,import_react18.useCallback)(()=>{let r=rutaDeHash();if(r.tipo==="seccion")return;let k=SECCION_DE[r.tipo];window.history.length>1?window.history.back():window.location.hash="#/"+k},[]),ultimoMes=inicio.facturado_hasta?sumarDias(inicio.facturado_hasta,-1).slice(0,7):new Date().toISOString().slice(0,7),primerAnio=(0,import_react18.useMemo)(()=>inicio.propiedades.reduce((y,p)=>p.primera_estancia?Math.min(y,Number(p.primera_estancia.slice(0,4))):y,Number(ultimoMes.slice(0,4))),[inicio,ultimoMes]),[periodo,setPeriodo]=(0,import_react18.useState)(()=>inicio.cuenta.maestro?periodoMes(ultimoMes):periodoAnio(ultimoMes.slice(0,4))),[titular,setTitular]=(0,import_react18.useState)(""),[propiedad,setPropiedad]=(0,import_react18.useState)(""),[abiertoT,setAbiertoT]=(0,import_react18.useState)(!1),[abiertoP,setAbiertoP]=(0,import_react18.useState)(!1),titulares=inicio.titulares,nombreTitular=(0,import_react18.useMemo)(()=>Object.fromEntries(titulares.map(t=>[t.id,t.nombre])),[titulares]),propsVisibles=(0,import_react18.useMemo)(()=>titular?inicio.propiedades.filter(p=>p.titulares.some(t=>String(t.id)===String(titular))):inicio.propiedades,[inicio,titular]),propPorId=(0,import_react18.useMemo)(()=>Object.fromEntries(inicio.propiedades.map(p=>[p.id,p])),[inicio]);(0,import_react18.useEffect)(()=>{propiedad&&!propsVisibles.some(p=>String(p.id)===String(propiedad))&&setPropiedad("")},[propsVisibles,propiedad]);let filtros=(0,import_react18.useMemo)(()=>({titular:titular||void 0,propiedad:propiedad||void 0}),[titular,propiedad]),conFacturado=seccion==="resumen"||seccion==="reservas"||seccion==="huespedes",facturado=useScript(api,"portal_facturado",{token,...filtros,desde:periodo.desde,hasta:periodo.hasta},conFacturado),opcionesTitular=(0,import_react18.useMemo)(()=>[{v:"",t:inicio.cuenta.maestro?"Todos los propietarios":"Todos mis titulares"}].concat(titulares.filter(t=>!t.empresa).map(t=>({v:t.id,t:t.nombre,g:"Personas"}))).concat(titulares.filter(t=>t.empresa).map(t=>({v:t.id,t:t.nombre,g:"Empresas"}))),[titulares,inicio]),opcionesPropiedad=(0,import_react18.useMemo)(()=>[{v:"",t:`Todas las propiedades (${propsVisibles.length})`}].concat(propsVisibles.map(p=>({v:p.id,t:p.nombre,s:p.unidades.length>1?`${p.unidades.length} unidades`:p.code?`#${p.code}`:""}))),[propsVisibles]),propsCalendario=(0,import_react18.useMemo)(()=>propiedad?propsVisibles.filter(p=>String(p.id)===String(propiedad)):propsVisibles,[propsVisibles,propiedad]),conFiltros=seccion!=="hostel"&&seccion!=="cuentas"&&seccion!=="comercial",conPeriodo=conFiltros&&seccion!=="calendario",abrirEstancia=(0,import_react18.useCallback)(e=>irA("reserva",e.id,String(e.entrada||"").slice(0,7)),[irA]);return(0,import_react18.useEffect)(()=>{if(ruta.tipo!=="reserva"||!ruta.mes)return;let primero=ruta.mes+"-01";primero>=periodo.desde&&primero__gh("button",{key:s.k,"data-on":seccion===s.k?"1":"0",onClick:()=>setSeccion(s.k),"data-gufi-src":"page.tsx:335"},s.t))),__gh("div",{style:{marginLeft:"auto"},"data-gufi-src":"page.tsx:337"},__gh(MenuCuenta,{cuenta:inicio.cuenta,salir,desdeGufi})))),__gh("main",{className:"p-main","data-gufi-src":"page.tsx:341"},conFiltros?__gh("div",{className:"p-filtros","data-gufi-src":"page.tsx:343"},titulares.length>1?__gh(Desplegable,{abierto:abiertoT,setAbierto:setAbiertoT,boton:__gh(Pildora,{etiqueta:inicio.cuenta.maestro?"Propietario":"Titular",valor:titular?nombreTitular[titular]:opcionesTitular[0].t,activa:abiertoT||!!titular,onClick:()=>setAbiertoT(!abiertoT)})},__gh(ListaBuscable,{opciones:opcionesTitular,valor:titular,placeholder:"Buscar propietario o empresa",onElegir:v=>{setTitular(v),setAbiertoT(!1)}})):null,propsVisibles.length>1||propiedad?__gh(Desplegable,{abierto:abiertoP,setAbierto:setAbiertoP,boton:__gh(Pildora,{etiqueta:"Propiedad",valor:propiedad?propPorId[propiedad].nombre:`Todas (${propsVisibles.length})`,activa:abiertoP||!!propiedad,onClick:()=>setAbiertoP(!abiertoP)})},__gh(ListaBuscable,{opciones:opcionesPropiedad,valor:propiedad,placeholder:"Buscar propiedad",onElegir:v=>{setPropiedad(v),setAbiertoP(!1)}})):null,conPeriodo?__gh(FiltroPeriodo,{periodo,setPeriodo,ultimoMes,primerAnio}):null,inicio.facturado_hasta?__gh("span",{className:"p-note p-only-d",style:{marginLeft:"auto"},"data-gufi-src":"page.tsx:357"},"Facturado por ",marca().nombre," hasta ",mesLabel(ultimoMes).toLowerCase()):null):null,!turistico&&!comercial?__gh("div",{className:"p-card","data-gufi-src":"page.tsx:362"},__gh(Vacio,{titulo:"Todav\xEDa no hay propiedades en tu cuenta",texto:`Cuando ${marca().nombre} asocie tus propiedades a este correo, aparecer\xE1n aqu\xED.`})):__gh("div",{className:"b-fade",key:ruta.tipo==="seccion"?seccion:ruta.tipo+ruta.id,"data-gufi-src":"page.tsx:364"},ruta.tipo==="reserva"?__gh(EstanciaPagina,{f:facturado,id:ruta.id,propPorId,periodo,api,token,onVolver:volver}):__gh(__gf,null,seccion==="resumen"&&__gh(Resumen,{f:facturado,inicio,periodo,setPeriodo,setPropiedad,propPorId}),seccion==="reservas"&&__gh(Reservas,{f:facturado,periodo,propPorId,abrirEstancia}),seccion==="calendario"&&__gh(Calendario,{api,token,filtros,propiedades:propsCalendario,ultimoMes,facturadoHasta:inicio.facturado_hasta,abrirEstancia}),seccion==="facturas"&&__gh(Facturas,{api,token,inicio,filtros,titular,periodo,propPorId,nombreTitular,facturaAbierta:ruta.tipo==="factura"?ruta.id:null,abrirFactura:id=>irA("factura",id),volver}),seccion==="huespedes"&&__gh(Huespedes,{f:facturado,periodo,propPorId,abrirEstancia}),seccion==="hostel"&&__gh(AreaHostel,{api,token}),seccion==="cuentas"&&__gh(Cuentas,{api,token,verComo}),seccion==="comercial"&&__gh(Comercial,{api,token,maestro:inicio.cuenta.maestro})))),__gh("nav",{className:"p-tabbar","data-gufi-src":"page.tsx:384"},secciones.map(s=>{let I=s.icono;return __gh("button",{key:s.k,"data-on":seccion===s.k?"1":"0",onClick:()=>setSeccion(s.k),"data-gufi-src":"page.tsx:385"},__gh(I,{size:20}),s.t)})))}function PortalPropietarios({gufi}){let desdeGufi=!!(gufi&&gufi.context&&gufi.context.user&&gufi.context.user.id&&typeof gufi.automation=="function"&&typeof gufi.hasPermission=="function"&&gufi.hasPermission("portal:maestra")),[token,setToken]=(0,import_react18.useState)(()=>desdeGufi?"":localStorage.getItem(TOKEN_KEY)||""),[inicio,setInicio]=(0,import_react18.useState)(null),[error,setError]=(0,import_react18.useState)(""),[entradaGufi,setEntradaGufi]=(0,import_react18.useState)(desdeGufi?"pendiente":"no"),[usuarioGufi,setUsuarioGufi]=(0,import_react18.useState)(""),[intentoGufi,setIntentoGufi]=(0,import_react18.useState)(0),modoGufi=(0,import_react18.useRef)(!1),[vista,setVista]=(0,import_react18.useState)(null),tokenVista=(0,import_react18.useRef)(""),[conMarca,setConMarca]=(0,import_react18.useState)(!1),[errorMarca,setErrorMarca]=(0,import_react18.useState)(""),salir=(0,import_react18.useCallback)(()=>{if(setInicio(null),setError(""),setVista(null),setToken(""),modoGufi.current){modoGufi.current=!1,setEntradaGufi("pendiente"),setIntentoGufi(n=>n+1);return}localStorage.removeItem(TOKEN_KEY)},[]),volver=(0,import_react18.useCallback)(()=>{tokenVista.current="",setVista(null)},[]),api=(0,import_react18.useCallback)(async(nombre,input)=>{try{return await gufi.publicAutomation(nombre).run(input||{})}catch(e){throw/SESSION_INVALID|AUTH_REQUIRED/.test(String(e&&e.message||e))&&(input&&tokenVista.current&&input.token===tokenVista.current?volver():salir()),e}},[gufi,salir,volver]),verComo=(0,import_react18.useCallback)(r=>{tokenVista.current=r.token,setVista({token:r.token,nombre:r.nombre||r.email,inicio:null,error:""}),api("portal_inicio",{token:r.token}).then(ini=>setVista(v=>v&&v.token===r.token?{...v,inicio:ini}:v)).catch(e=>setVista(v=>v&&v.token===r.token?{...v,error:String(e&&e.message||e)}:v))},[api]);(0,import_react18.useEffect)(()=>{if(!desdeGufi)return;let vivo=!0;return gufi.automation("portal_entrar_erp",{}).then(r=>{vivo&&(r&&r.maestra?(modoGufi.current=!0,setUsuarioGufi(r.usuario||""),setToken(r.token),setEntradaGufi("dentro")):(setToken(localStorage.getItem(TOKEN_KEY)||""),setEntradaGufi("no")))}).catch(e=>{vivo&&(setError(String(e&&e.message||e)),setEntradaGufi("no"))}),()=>{vivo=!1}},[intentoGufi]),(0,import_react18.useEffect)(()=>{if(!token)return;let vivo=!0;return setError(""),api("portal_inicio",{token}).then(r=>{vivo&&setInicio(r)}).catch(e=>{vivo&&setError(String(e&&e.message||e))}),()=>{vivo=!1}},[token,api]),(0,import_react18.useEffect)(()=>{let vivo=!0;return gufi.publicAutomation("portal_marca").run({}).then(m=>{vivo&&(fijarMarca(m),setConMarca(!0))}).catch(e=>{vivo&&setErrorMarca(String(e&&e.message||e))}),()=>{vivo=!1}},[]);let entrar=tk=>{localStorage.setItem(TOKEN_KEY,tk),setToken(tk)};return errorMarca?__gh("div",{className:"b-root p-shell",style:{display:"flex",alignItems:"center",justifyContent:"center",padding:24},"data-gufi-src":"page.tsx:471"},__gh("style",{"data-gufi-src":"page.tsx:472"},B_CSS),__gh("div",{className:"p-card",style:{maxWidth:420,padding:8},"data-gufi-src":"page.tsx:473"},__gh(Vacio,{titulo:"No se ha podido abrir el portal",texto:errorMarca}))):!conMarca||entradaGufi==="pendiente"?__gh("div",{className:"b-root p-shell",style:{display:"flex",alignItems:"center",justifyContent:"center"},"data-gufi-src":"page.tsx:478"},__gh("style",{"data-gufi-src":"page.tsx:479"},B_CSS),__gh(import_lucide_react18.Loader2,{className:"animate-spin",style:{color:B.accent}})):!token&&!error?__gh(Entrar,{api,onEntrar:entrar}):error?__gh("div",{className:"b-root p-shell",style:{display:"flex",alignItems:"center",justifyContent:"center",padding:24},"data-gufi-src":"page.tsx:485"},__gh("style",{"data-gufi-src":"page.tsx:486"},B_CSS),__gh("div",{className:"p-card",style:{maxWidth:420,padding:8},"data-gufi-src":"page.tsx:487"},__gh(Vacio,{titulo:"No hemos podido cargar tu \xE1rea",texto:error}),__gh("div",{style:{display:"flex",justifyContent:"center",gap:8,paddingBottom:18},"data-gufi-src":"page.tsx:489"},__gh("button",{className:"p-btn",onClick:()=>window.location.reload(),"data-gufi-src":"page.tsx:490"},"Reintentar"),__gh("button",{className:"p-btn",onClick:salir,"data-gufi-src":"page.tsx:491"},"Cerrar sesi\xF3n")))):!inicio||vista&&!vista.inicio&&!vista.error?__gh("div",{className:"b-root p-shell",style:{display:"flex",alignItems:"center",justifyContent:"center"},"data-gufi-src":"page.tsx:497"},__gh("style",{"data-gufi-src":"page.tsx:498"},B_CSS),__gh(import_lucide_react18.Loader2,{className:"animate-spin",style:{color:B.accent}})):vista&&vista.error?__gh("div",{className:"b-root p-shell",style:{display:"flex",alignItems:"center",justifyContent:"center",padding:24},"data-gufi-src":"page.tsx:503"},__gh("style",{"data-gufi-src":"page.tsx:504"},B_CSS),__gh("div",{className:"p-card",style:{maxWidth:420,padding:8},"data-gufi-src":"page.tsx:505"},__gh(Vacio,{titulo:`No se ha podido abrir el portal de ${vista.nombre}`,texto:vista.error}),__gh("div",{style:{display:"flex",justifyContent:"center",paddingBottom:18},"data-gufi-src":"page.tsx:507"},__gh("button",{className:"p-btn",onClick:volver,"data-gufi-src":"page.tsx:507"},"Volver a la cuenta maestra")))):vista?__gh(Portal,{key:vista.token,api,token:vista.token,inicio:vista.inicio,salir:volver,vista:{nombre:vista.nombre,volver}}):__gh(Portal,{key:token,api,token,inicio,salir,verComo,desdeGufi:entradaGufi==="dentro"?usuarioGufi||"tu usuario de Gufi":""})}var featureConfig={dataSources,meta:{name:"Portal Propietarios",version:"1.0.0"}};var stdin_default=PortalPropietarios;