1import{d as I,q as _,bm as p,j as g,aQ as u,aA as d,p as t,x as o,r as m,s as c,F as C,aO as M,ap as w,a$ as r,bo as N,w as A}from"../js/app-CNdFePcO.js";import{b as k,c as q,a as T}from"./selection-request-zWLnBICl.js";import{a as D,L as j}from"./main-D6V-atOV.js";import{s as z}from"./multiselect-yGBLaQ96.js";import{a as K,R as H}from"./reservation-preview-modal-BDd4eZ9Z.js";/* empty css */import"./horizontal-nav.vue_vue_type_style_index_0_scoped_5eb078ae_lang-D9gKHJdp.js";import"./PwaInstallButton-b5b9GheP.js";/* empty css */import"./messagingStore-C9TTqHEN.js";import"./logo-BPXRvMPO.js";import"./logo-light-D6djr6jC.js";import"./sweetalert2.esm.all-C2Wuf_dN.js";const J={components:{Layout:j,LoadingState:D,Multiselect:z,ReservationFormModal:H,ReservationPreviewModal:K},data(){return{loading:!1,error:null,reservations:[],pagination:{current_page:1,last_page:1,total:0},catalogs:{dependencies:[],dependency_types:[],staff:[],departments:[],statuses:[],repetition_types:[]},filters:{search:"",dependency_id:null,dependency_type_id:null,staff_id:null,department_id:null,
1status:null,date_from:"",date_to:""},showFormModal:!1,showPreviewModal:!1,selectedReservation:null,editingReservation:null,draftSelection:{},detailLoading:!1}},computed:{permissions(){return JSON.parse(localStorage.getItem("permissions")||"[]")},canCreate(){return this.permissions.includes("crear_reservas")},canEdit(){return this.permissions.includes("editar_reservas")||this.permissions.includes("administrar_calendario")},dependencyOptions(){return[{value:null,label:"Todas"}].concat((this.catalogs.dependencies||[]).map(s=>({value:s.id,label:s.name})))},typeOptions(){return[{value:null,label:"Todos"}].concat((this.catalogs.dependency_types||[]).map(s=>({value:s.id,label:s.name})))},staffOptions(){return[{value:null,label:"Todos"}].concat((this.catalogs.staff||[]).map(s=>({value:s.id,label:s.full_name})))},departmentOptions(){return[{value:null,label:"Todos"}].concat((this.catalogs.departments||[]).map(s=>({value:s.id,label:s.name})))},statusOptions(){return[{value:null,label:"Todos"}].concat((this.catalogs.statuses||[]).map(s=>({value:s.value,label:s.label})))},summaryCards(){const s=this.reservations.filter(i=>i.status==="pendiente").length,e=this.reservations.filter(i=>i.status==="aprobada").length;return[{label:"Reservas",value:this.formatInteger(this.pagination.total||this.reservations.length),detail:"según filtros aplicados",icon:"bx-calendar",tone:"blue"},{label:"Pendientes",value:this.formatInteger(s),detail:"en página actual",icon:"bx-time-five",tone:"amber"},{label:"Aprobadas",value:this.formatInteger(e),detail:"en página actual",icon:"bx-check-circle",tone:"green"}]},hasActiveFilters(){return!!(this.filters.search||this.filters.dependency_id||this.filters.dependency_type_id||this.filters.staff_id||this.filters.department_id||this.filters.status||this.filters.date_from||this.filters.date_to)},paginationRange(){if(!this.pagination.total)return"Sin resultados";const s=Number(this.pagination.per_page||15),e=(Number(this.pagination.current_page||1)-1)*s+1,i=Math.min(e+s-1,Number(this.pagination.total||0));return`${this.formatInteger(e)}-${this.formatInteger(i)} de ${this.formatInteger(this.pagination.total)}`}},mounted(){this.loadCatalogs(),this.load()},beforeUnmount(){T(this)},watch:{showFormModal:{flush:"sync",handler(s){s||this.cancelSelection()}},showPreviewModal:{flush:"sync",handler(s){s||this.cancelSelection()}}},methods:{cancelSelection(){q(this),this.detailLoading=!1},async loadCatalogs(){const s=await g.get("/api/spaces/reservations/catalogs");this.catalogs=s.data},async load(s=1){this.loading=!0,this.error=null;try{const e=await g.get("/api/spaces/reservations",{params:{page:s,...this.filters}});this.reservations=e.data.data,this.pagination={current_page:e.data.current_page,last_page:e.data.last_page,total:e.data.total,per_page:e.data.per_page}}catch(e){this.error=this.formatError(e)}finally{this.loading=!1}},openCreate(){this.canCreate&&(this.cancelSelection(),this.showPreviewModal=!1,this.editingReservation=null,this.draftSelection={},this.showFormModal=!0)},resetFilters(){this.filters={search:"",dependency_id:null,dependency_type_id:null,staff_id:null,department_id:null,
1status:null,date_from:"",date_to:""},this.load(1)},async openEdit(s){if(!this.canEdit)return;this.cancelSelection(),this.showPreviewModal=!1,this.showFormModal=!1,this.editingReservation=null;const e=k(this);this.detailLoading=!0,this.error=null;try{const i=await g.get(`/api/spaces/reservations/${s.id}`,{signal:e.signal});if(!e.current())return;this.editingReservation=i.data.data,this.showFormModal=!0}catch(i){e.current()&&(this.error=this.formatError(i))}finally{e.current()&&(this.detailLoading=!1)}},async openPreview(s){this.cancelSelection(),this.showFormModal=!1,this.showPreviewModal=!1,this.selectedReservation=null;const e=k(this);this.detailLoading=!0,this.error=null;try{const i=await g.get(`/api/spaces/reservations/${s.id}`,{signal:e.signal});if(!e.current())return;this.selectedReservation=i.data.data,this.showPreviewModal=!0}catch(i){e.current()&&(this.error=this.formatError(i))}finally{e.current()&&(this.detailLoading=!1)}},handleSaved(){this.cancelSelection(),this.editingReservation=null,this.selectedReservation=null,this.draftSelection={},this.load(this.pagination.current_page)},openReschedule(s){this.canCreate&&(this.cancelSelection(),this.editingReservation=null,this.selectedReservation=null,this.showPreviewModal=!1,this.draftSelection={maintenance_dependency_id:s.maintenance_dependency_id,staff_id:s.staff_id,department_id:s.department_id,title:s.title,activity:s.activity,start_date:s.start_date,start_time:s.start_time,end_date:s.end_date,end_time:s.end_time,repetition_type:"none",repetition_until:"",observations:s.observations,estimated_attendees:s.estimated_attendees,special_requirements:s.special_requirements,collaborator_staff_ids:(s.collaborators||[]).filter(e=>e.staff_id).map(e=>e.staff_id),collaborator_external_emails:(s.collaborators||[]).filter(e=>e.external_email).map(e=>e.external_email)},this.showFormModal=!0)},statusClass(s){return`spaces-status-pill--${s||"secondary"}`},formatInteger(s){return Number(s||0).toLocaleString("es-CL",{maximumFractionDigits:0})},formatError(s){var i,b,l,n,h;const e=((b=(i=s==null?void 0:s.response)==null?void 0:i.data)==null?void 0:b.errors)||null;return(e?(l=e[Object.keys(e)[0]])==null?void 0:l[0]:null)||((h=(n=s==null?void 0:s.response)==null?void 0:n.data)==null?void 0:h.message)||(s==null?void 0:s.message)||"Error desconocido"}}},Q={class:"spaces-shell"},G={class:"spaces-hero"},W={class:"spaces-actions"},X={key:0,class:"alert alert-info d-flex align-items-center justify-content-between gap-3",role:"status"},Y={class:"spaces-summary-grid"},Z={class:"spaces-summary-icon"},$={class:"spaces-panel"},ee={class:"spaces-filter-grid spaces-filter-grid--wide"},te={class:"spaces-field"},se={class:"spaces-field"},ae={class:"spaces-field"},le={class:"spaces-field"},ne={class:"spaces-field"},ie={class:"spaces-field"},oe={class:"spaces-field"},re={class:"spaces-filter-actions"},de={class:"spaces-panel"},ue={class:"spaces-panel-header"},ce={class:"spaces-panel-meta"},pe={key:0,class:"spaces-empty-state"},me={key:1,class:"spaces-table-wrap"}
1,fe={class:"table spaces-data-table spaces-data-table--wide"},he={class:"spaces-table-title"},ve={class:"spaces-table-subtitle"},_e={class:"spaces-table-title"},ge={class:"spaces-table-subtitle"},be={class:"spaces-table-subtitle"},ye={class:"text-center"},we={class:"spaces-row-actions"},Ve={key:0},xe={key:2,class:"d-flex justify-content-end mt-3"};function Se(s,e,i,b,l,n){const h=u("router-link"),f=u("BButton"),y=u("BFormInput"),v=u("Multiselect"),F=u("BAlert"),L=u("LoadingState"),E=u("BPagination"),P=u("ReservationFormModal"),B=u("ReservationPreviewModal"),O=u("Layout");return d(),_(O,null,{default:p(()=>[t("div",Q,[t("section",G,[e[15]||(e[15]=t("div",{class:"spaces-hero__body"},[t("div",{class:"spaces-eyebrow"},"Dependencias y reservas"),t("h4",null,"Reservas de dependencias"),t("p",null,"Listado, filtros y gestión operativa de agendamientos por espacio.")],-1)),t("div",W,[o(h,{to:"/spaces/calendar",class:"btn btn-outline-secondary"},{default:p(()=>[...e[13]||(e[13]=[t("i",{class:"bx bx-calendar-event"},null,-1),t("span",null,"Calendario",-1)])]),_:1}),n.canCreate?(d(),_(f,{key:0,variant:"primary",onClick:n.openCreate},{default:p(()=>[...e[14]||(e[14]=[t("i",{class:"bx bx-plus"},null,-1),t("span",null,"Nueva reserva",-1)])]),_:1}
1,8,["onClick"])):m("",!0)])]),l.detailLoading?(d(),c("div",X,[e[16]||(e[16]=t("span",null,"Cargando la reserva seleccionadaâ¦",-1)),t("button",{type:"button",class:"btn btn-sm btn-outline-secondary",onClick:e[0]||(e[0]=(...a)=>n.cancelSelection&&n.cancelSelection(...a))},"Cancelar")])):m("",!0),t("div",Y,[(d(!0),c(C,null,M(n.summaryCards,a=>(d(),c("div",{key:a.label,class:w(["spaces-summary-card",`spaces-summary-card--${a.tone}`])},[t("div",Z,[t("i",{class:w(`bx ${a.icon}`)},null,2)]),t("div",null,[t("span",null,r(a.label),1),t("strong",null,r(a.value),1),t("small",null,r(a.detail),1)])],2))),128))]),t("section",$,[e[26]||(e[26]=t("div",{class:"spaces-panel-header"},[t("div",null,[t("div",{class:"spaces-eyebrow"},"Filtros"),t("h5",{class:"spaces-panel-title"},"Segmentar reservas")])],-1)),t("div",ee,[t("label",te,[e[17]||(e[17]=t("span",null,"Buscar",-1)),o(y,{modelValue:l.filters.search,"onUpdate:modelValue":e[1]||(e[1]=a=>l.filters.search=a),placeholder:"TÃtulo, actividad...",onKeyup:e[2]||(e[2]=N(a=>n.load(1),["enter"]))},null,8,["modelValue"])]),t("label",se,[e[18]||(e[18]=t("span",null,"Dependencia",-1)),o(v,{modelValue:l.filters.dependency_id,"onUpdate:modelValue":e[3]||(e[3]=a=>l.filters.dependency_id=a),options:n.dependencyOptions,searchable:!0},null,8,["modelValue","options"])]),t("label",ae,[e[19]||(e[19]=t("span",null,"Tipo",-1)),o(v,{modelValue:l.filters.dependency_type_id,"onUpdate:modelValue":e[4]||(e[4]=a=>l.filters.dependency_type_id=a),options:n.typeOptions,searchable:!0},null,8,["modelValue","options"])]),t("label",le,[e[20]||(e[20]=t("span",null,"Funcionario",-1)),o(v,{modelValue:l.filters.staff_id,"onUpdate:modelValue":e[5]||(e[5]=a=>l.filters.staff_id=a),options:n.staffOptions,searchable:!0},null,8,["modelValue","options"])]),t("label",ne,[e[21]||(e[21]=t("span",null,"Estado",-1)),o(v,{modelValue:l.filters.status,"onUpdate:modelValue":e[6]||(e[6]=a=>l.filters.status=a),options:n.statusOptions,searchable:!1},null,8,["modelValue","options"])]),t("label",ie,[e[22]||(e[22]=t("span",null,"Desde",-1)),o(y,{modelValue:l.filters.date_from,"onUpdate:modelValue":e[7]||(e[7]=a=>l.filters.date_from=a),type:"date"},null,8,["modelValue"])]),t("label",oe,[e[23]||(e[23]=t("span",null,"Hasta",-1)),o(y,{modelValue:l.filters.date_to,"onUpdate:modelValue":e[8]||(e[8]=a=>l.filters.date_to=a),type:"date"},null,8,["modelValue"])]),t("div",re,[o(f,{variant:"primary",disabled:l.loading,onClick:e[9]||(e[9]=a=>n.load(1))},{default:p(()=>[...e[24]||(e[24]=[t("i",{class:"bx bx-filter-alt"},null,-1),t("span",null,"Aplicar",-1)])]),_:1},8,["disabled"]),o(f,{variant:"outline-secondary",disabled:l.loading||!n.hasActiveFilters,onClick:n.resetFilters},{default:p(()=>[...e[25]||(e[25]=[t("i",{class:"bx bx-x"},null,-1),t("span",null,"Limpiar",-1)])]),_:1},8,["disabled","onClick"])])])]),l.error?(d(),_(F,{key:1,variant:"danger",show:"",class:"mb-0"},{default:p(()=>[A(r(l.error),1)]),_:1})):m("",!0),t("section",de,[t("div",ue,[e[27]||(e[27]=t("div",null,[t("div",{class:"spaces-eyebrow"},"Listado"),t("h5",{class:"spaces-panel-title"},"Reservas registradas")],-1)),t("div",ce,r(n.paginationRange),1)]),l.loading&&l.reservations.length===0?(d(),c("div",pe,[o(L,{message:"Cargando reservas...",compact:""})])):(d(),c("div",me,[t("table",fe,[e[31]||(e[31]=t("thead",null,[t("tr",null,[t("th",{style:{width:"24%"}},"Reserva"),t("th",{style:{width:"18%"}},"Dependencia"),t("th",{style:{width:"18%"}},"Funcionario"),t("th",{style:{width:"16%"}},"Inicio"),t("th",{style:{width:"12%"},class:"text-center"},"Estado"),t("th",{style:{width:"12%"},class:"text-center"},"Acciones")])],-1)),t("tbody",null,[(d(!0),c(C,null,M(l.reservations,a=>{var V,x,S,R;return d(),c("tr",{key:a.id},[t("td",null,[t("div",he,r(a.title),1),t("span",ve,r(a.activity||"Sin actividad"),1)]),t("td",null,[t("div",_e,r(((V=a.dependency)==null?void 0:V.name)||"-"),1),t("span",ge,r(((S=(x=a.dependency)==null?void 0:x.type)==null?void 0:S.name)||"Sin tipo"),1)]),t("td",null,r(((R=a.staff)==null?void 0:R.full_name)||"-"),1),t("td",null,[t("div",null,r(a.start_date)+" "+r(a.start_time),1),t("span",be,r(a.end_date)+" "+r(a.end_time),1)]),t("td",ye,[t("span",{class:w(["spaces-status-pill",n.statusClass(a.status)])},r(a.status),3)]),t("td",null,[t("div",we,[o(f,{size:"sm",variant:"outline-primary",title:"Ver","aria-label":"Ver reserva",onClick:U=>n.openPreview(a)},{default:p(()=>[...e[28]||(e[28]=[t("i",{class:"bx bx-show"},null,-1),t("span",null,"Ver",-1)])]),_:1}
1,8,["onClick"]),n.canEdit&&a.status!=="cancelada"?(d(),_(f,{key:0,size:"sm",variant:"outline-info",title:"Editar","aria-label":"Editar reserva",onClick:U=>n.openEdit(a)},{default:p(()=>[...e[29]||(e[29]=[t("i",{class:"bx bx-edit"},null,-1),t("span",null,"Editar",-1)])]),_:1},8,["onClick"])):m("",!0)])])])}),128)),l.reservations.length===0?(d(),c("tr",Ve,[...e[30]||(e[30]=[t("td",{colspan:"6"},[t("div",{class:"spaces-empty-state"},[t("i",{class:"bx bx-calendar-x"}),t("strong",null,"No hay reservas para mostrar"),t("span",null,"Ajusta los filtros o crea una nueva reserva.")])],-1)])])):m("",!0)])])])),l.pagination.total>(l.pagination.per_page||15)?(d(),c("div",xe,[o(E,{modelValue:l.pagination.current_page,"onUpdate:modelValue":[e[10]||(e[10]=a=>l.pagination.current_page=a),n.load],"per-page":l.pagination.per_page||15,"total-rows":l.pagination.total},null,8,["modelValue","per-page","total-rows","onUpdate:modelValue"])])):m("",!0)])]),o(P,{modelValue:l.showFormModal,"onUpdate:modelValue":e[11]||(e[11]=a=>l.showFormModal=a),catalogs:l.catalogs,reservation:l.editingReservation,"draft-selection":l.draftSelection,onSaved:n.handleSaved},null,8,["modelValue","catalogs","reservation","draft-selection","onSaved"]),o(B,{modelValue:l.showPreviewModal,"onUpdate:modelValue":e[12]||(e[12]=a=>l.showPreviewModal=a),reservation:l.selectedReservation,onSaved:n.handleSaved,onReschedule:n.openReschedule,onEdit:n.openEdit},null,8,["modelValue","reservation","onSaved","onReschedule","onEdit"])]),_:1})}const Ae=I(J,[["render",Se]]);export{Ae as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.