1import{n as ue,a0 as ee,a as je,r as p,s as v,u as b,j as e,U as ae,V as te,W as oe,Y as ne,Z as ie,T as ve,B as I,a7 as se,bl as H,p as Ne,f as Ce,e as be,C as qe,l as Fe,a1 as ke}from"./index-DfOJmvz4.js";import{U as Ie}from"./UnitOperationalHeader-DYVL0Bty.js";import{B as U}from"./badge-Dbl0Jwtm.js";import{D as Ae,a as De,b as Se,e as K}from"./dropdown-menu-By9cTOSf.js";import{A as Ee,a as Te,b as Re,c as Me,d as Pe,e as Oe,f as we,g as ze}from"./alert-dialog-Bu3Oi65g.js";import{u as re}from"./useOfficeTenants-ydlYJBjk.js";import{g as Le}from"./demoOfficeOperationalData-Bfqgu0Fq.js";import"./demoPropertyTypeData-De9KIRme.js";import{N as Ve,a as Be,O as Ue}from"./contractWizardConfigs-BmivDN-L.js";import{A as Ge,b as Ke}from"./alert-CxOnRn_V.js";import{T as $e}from"./TemplatePreviewDialog-BTJUcum8.js";import{u as Xe}from"./index-C-llSyQH.js";import{r as He,u as L,a as Ye}from"./xlsx-CwpDMyS9.js";import{C as We}from"./ColumnMapper-C-wLT71-.js";import{e as E}from"./importParsingUtils-XFBMvQ6l.js";import{F as Je}from"./file-spreadsheet-DTWg_2WK.js";import{D as Ze}from"./download-Cj4N-sj-.js";import{U as fe}from"./upload-C_kbLsjP.js";import{S as Qe}from"./sparkles-DXL9TkX8.js";import{L as G}from"./loader-circle-rLXjDXa8.js";import{C as ea}from"./circle-check-C00U2u3l.js";import{L as R}from"./label-B-DNcIAs.js";import{S as Y,a as W,b as J,c as Z,d as Q}from"./select-CJff1OXZ.js";import{c as aa}from"./contractDateValidation-CMDSRnyn.js";import{C as pe}from"./circle-alert-C9ihB5Z4.js";import{I as V}from"./input-Vet5F-CU.js";import{T as ta}from"./textarea-BWprJflG.js";import{g as oa}from"./officeDomainConstants-Kfr5kSSZ.js";import{P as he}from"./pencil-BjX4drB7.js";import{P as na}from"./paginated-table-BRmuN3pX.js";import{B as ia}from"./building-2-Bsxya_X5.js";import{A as sa}from"./arrow-left-DHLt5dfU.js";import{P as ra}from"./plus-BrPtK6Sd.js";import{F as ca}from"./file-text-f4n0A-yg.js";import{E as la}from"./ellipsis-ChaP9twA.js";import{T as da}from"./trash-2-Br_Yo4vG.js";import{f as $}from"./format-9oAvKElA.js";import{e as X}from"./es-DYyshBza.js";import"./index-6ZOEkj60.js";import"./index-ivjWPsw3.js";import"./chevron-right-pbEstDsr.js";import"./check-XU_nGxmM.js";import"./StepProgressIndicator-CB0Xvu1L.js";import"./netLeaseConstants-D5wE3N5C.js";import"./info-9HftpuiD.js";import"./switch-gOhWWiFw.js";import"./index-BtGj9Er1.js";import"./calendar-DtgfK5N2.js";import"./differenceInCalendarDays-CyB0mb81.js";import"./getTimezoneOffsetInMilliseconds-vKak5z5M.js";import"./differenceInCalendarMonths-CimoRhaI.js";import"./isSameMonth-CEm2N_Yn.js";import"./subDays-BeK5-8Sv.js";import"./isBefore-Bg1hwg4b.js";import"./startOfMonth-DGaJEfit.js";import"./addMonths-Bjx4jNjV.js";import"./endOfMonth-DQMs1Pvv.js";import"./isAfter-CPv-MFMs.js";import"./chevron-left-B4fCo4Cf.js";import"./popover-B3jXsFN0.js";import"./calendar-Dq05LY-4.js";import"./users-BZXBZcrg.js";import"./apartmentDomainConstants-CdYKZDdO.js";import"./tabs-Czrmf5jI.js";import"./table-DfwkKR6X.js";import"./scroll-area-DpAp9dfv.js";import"./copy-C750C51G.js";import"./index-vseAPPBi.js";import"./chevron-down-UE20mCyh.js";import"./pagination-DRFrlWwl.js";import"./arrow-up-down-DTRvW7N4.js";function ce(){const{currentUser:u}=ue(),{selectedUnitId:a,selectedBuildingId:s}=ee(),{isDemoMode:m,demoRole:_}=je(),q=m&&_==="realEstateAdmin",[T,o]=p.useState([]),[f,g]=p.useState(!0),[i,j]=p.useState(null),y=u==null?void 0:u.profileId,h=p.useCallback(async()=>{if(!y){g(!1);return}try{g(!0),j(null);let n=v.from("office_contracts").select("*, office_tenants(nombre), offices(numero_oficina)").eq("owner_id",y).is("bulk_session_id",null).order("created_at",{ascending:!1});a&&(n=n.eq("office_id",a));const{data:r,error:c}=await n;if(c)throw c;const l=(r||[]).map(d=>{var O,M;return{id:d.id,officeId:d.office_id,tenantId:d.tenant_id||void 0,ownerId:d.owner_id,tipoContrato:d.tipo_contrato||"arrendamiento",fechaInicio:d.fecha_inicio,fechaFin:d.fecha_fin||void 0,montoRenta:d.monto_renta,deposito:d.deposito||void 0,diaPago:d.dia_pago||1,incrementoAnual:d.incremento_anual||void 0,moneda:d.moneda||"MXN",documentoUrl:d.documento_url||void 0,notas:d.notas||void 0,status:d.status||"activo",createdAt:d.created_at,updatedAt:d.updated_at,tenantName:(O=d.office_tenants)==null?void 0:O.nombre,officeNumber:(M=d.office
1s)==null?void 0:M.numero_oficina}});o(l)}catch(n){console.error("Error fetching office contracts:",n),j(n instanceof Error?n.message:"Error al cargar contratos")}finally{g(!1)}},[y,a]);return p.useEffect(()=>{if(q&&s){const n=Le(s),r=a?n.contracts.filter(c=>c.officeId===a):n.contracts;o(r),g(!1);return}h()},[h,q,s,a]),{contracts:T,loading:f,error:i,refetch:h,createContract:async n=>{if(!y)throw new Error("No hay usuario autenticado");const{error:r}=await v.from("office_contracts").insert({office_id:n.officeId,tenant_id:n.tenantId,owner_id:y,tipo_contrato:n.tipoContrato||"arrendamiento",fecha_inicio:n.fechaInicio,fecha_fin:n.fechaFin,fecha_fin_manual:n.fechaFinManual||null,fecha_firma:n.fechaFirma||null,monto_renta:n.montoRenta,deposito:n.deposito,deposito_garantia:n.depositoGarantia||null,dia_pago:n.diaPago||1,incremento_anual:n.incrementoAnual,moneda:n.moneda||"MXN",documento_url:n.documentoUrl,notas:n.notas,status:n.status||"activo"});if(r)throw r;await h()},updateContract:async(n,r)=>{const c={};r.tenantId!==void 0&&(c.tenant_id=r.tenantId),r.tipoContrato!==void 0&&(c.tipo_contrato=r.tipoContrato),r.fechaInicio!==void 0&&(c.fecha_inicio=r.fechaInicio),r.fechaFin!==void 0&&(c.fecha_fin=r.fechaFin),r.montoRenta!==void 0&&(c.monto_renta=r.montoRenta),r.deposito!==void 0&&(c.deposito=r.deposito),r.diaPago!==void 0&&(c.dia_pago=r.diaPago),r.incrementoAnual!==void 0&&(c.incremento_anual=r.incrementoAnual),r.notas!==void 0&&(c.notas=r.notas),r.status!==void 0&&(c.status=r.status),r.documentoUrl!==void 0&&(c.documento_url=r.documentoUrl);const{error:l}=await v.from("office_contracts").update(c).eq("id",n);if(l)throw l;await h()},deleteContract:async n=>{const{error:r}=await v.from("office_contracts").delete().eq("id",n);if(r)throw r;await h()}}}const ma={inquilinos:{entityType:"inquilinos",displayName:"Inquilinos",columns:[{key:"tipo_inquilino",header:"Tipo Inquilino",required:!1,type:"select",options:["persona_fisica","persona_moral"],example:"persona_fisica",description:"Tipo de inquilino"},{key:"nombre",header:"Nombre(s)*",required:!0,type:"text",example:"Juan Carlos",description:"Nombre o nombres del inquilino"},{key:"apellido_paterno",header:"Apellido Paterno*",required:!0,type:"text",example:"GarcÃa",description:"Apellido paterno"},{key:"apellido_materno",header:"Apellido Materno",required:!1,type:"text",example:"López",description:"Apellido materno"},{key:"empresa",header:"Empresa",required:!1,type:"text",example:"ACME S.A.",description:"Empresa o razón social"},{key:"email",header:"Email*",required:!0,type:"text",example:"[email protected]",description:"Correo electrónico"},{key:"telefono",header:"Teléfono*",required:!0,type:"text",example:"5512345678",description:"Número de teléfono"},{key:"telefono_emergencia",header:"Teléfono Emergencia",required:!1,type:"text",example:"5587654321",description:"Teléfono de emergencia"},{key:"rfc",header:"RFC",required:!1,type:"text",example:"XAXX010101000",description:"RFC del inquilino"},{key:"direccion_anterior",header:"Dirección Anterior",required:!1,type:"text",example:"Calle anterior 123",description:"Dirección anterior"},{key:"referencias",header:"Referencias/Aval",required:!1,type:"text",example:"Referencia personal",description:"Referencias o aval"},{key:"notas",header:"Notas",required:!1,type:"text",example:"Notas adicionales",description:"Notas adicionales"}],instructions:["Llena los campos requeridos marcados con *"],allowedValues:{tipo_inquilino:["persona_fisica","persona_moral"]}},contratos:{entityType:"contratos",displayName:"Contratos",columns:[{key:"tipo_contrato",header:"Tipo Contrato*",required:!0,type:"select",options:["arrendamiento","subarrendamiento","comodato"],example:"arrendamiento",description:"Tipo de contrato"},{key:"fecha_inicio",header:"Fecha Inicio*",required:!0,type:"date",example:"01/01/2024",description:"Fecha de inicio del contrato"},{key:"fecha_fin",header:"Fecha Fin",required:!1,type:"date",example:"31/12/2024",description:"Fecha de finalización"},{key:"monto_renta",header:"Renta Mensual*",required:!0,type:"number",example:"15000",description:"Monto de renta mensual"},{key:"deposito",header:"Depósito",required:!1,type:"number",example:"30000",description:"Monto del depósito"},{key:"dia_pago",header:"DÃa de Pago",required:!1,type:"number",min:1,max:28,example:"1",description:"DÃa del mes para pago (1-28)"},{key:"incremento_anual",header:"Incremento Anual %",required:!1,type:"number",example:"5",description:"Porcentaje de incremento anual"},{key:"notas",header:"Notas",required:!1,type:"text",example:"Notas adicionales",description:"Notas adicionales"}],instructions:['Los contratos importados quedan en estado "pendiente" hasta asignarles un inquilino'],allowedValues:{tipo_contrato:["arrendamiento","subarrendamiento","comodato"]}},ingresos:{entityType:"ingresos",displayName:"Ingresos",columns:[{key:"concepto",header:"Concepto*",required:!0,type:"text",example:"Pago de renta Enero",de
1scription:"Concepto del ingreso"},{key:"monto",header:"Monto*",required:!0,type:"number",example:"15000",description:"Monto del ingreso"},{key:"fecha",header:"Fecha*",required:!0,type:"date",example:"15/01/2024",description:"Fecha del ingreso"},{key:"metodo_pago",header:"Método de Pago",required:!1,type:"select",options:["efectivo","transferencia","cheque","tarjeta","otro"],example:"transferencia",description:"Método de pago"},{key:"referencia",header:"Referencia/Folio",required:!1,type:"text",example:"REF-001",description:"Número de referencia"},{key:"notas",header:"Notas",required:!1,type:"text",example:"Notas adicionales",description:"Notas adicionales"}],instructions:["Los ingresos importados NO tienen inquilino asignado","Después de importar, deberás asignar manualmente el inquilino a cada registro"],allowedValues:{metodo_pago:["efectivo","transferencia","cheque","tarjeta","otro"]}},egresos:{entityType:"gastos",displayName:"Egresos",columns:[{key:"concepto",header:"Concepto*",required:!0,type:"text",example:"Mantenimiento elevador",description:"Concepto del egreso"},{key:"monto",header:"Monto*",required:!0,type:"number",example:"5000",description:"Monto del egreso"},{key:"fecha",header:"Fecha*",required:!0,type:"date",example:"10/03/2024",description:"Fecha del egreso"},{key:"categoria",header:"CategorÃa*",required:!0,type:"text",example:"mantenimiento",description:"CategorÃa del egreso"},{key:"status",header:"Estado de Pago",required:!1,type:"select",options:["pagado","pendiente","atrasado","cancelado"],example:"pagado",description:"Estado del pago"},{key:"metodo_pago",header:"Método de Pago",required:!1,type:"select",options:["efectivo","transferencia","cheque","deposito","tarjeta_debito","tarjeta_credito","spei","otro"],example:"transferencia",description:"Método de pago"},{key:"fecha_pago",header:"Fecha de Pago",required:!1,type:"date",example:"12/03/2024",description:"Fecha en que se realizó el pago"},{key:"cuenta_origen",header:"Cuenta Origen",required:!1,type:"text",example:"BBVA 1234",description:"Cuenta bancaria de origen"},{key:"referencia_pago",header:"Referencia de Pago",required:!1,type:"text",example:"REF-G-0001",description:"Referencia o folio del pago"},{key:"numero_factura",header:"Número Factura",required:!1,type:"text",example:"FAC-0199",description:"Número de factura asociada"},{key:"notas",header:"Notas",required:!1,type:"text",example:"Factura incluida",description:"Notas adicionales"}],instructions:["Los egresos se vinculan automáticamente a la oficina seleccionada"],allowedValues:{status:["pagado","pendiente","atrasado","cancelado"],metodo_pago:["efectivo","transferencia","cheque","deposito","tarjeta_debito","tarjeta_credito","spei","otro"]}},documentos:{entityType:"inquilinos",displayName:"Documentos",columns:[{key:"nombre",header:"Nombre*",required:!0,type:"text",example:"Contrato 2024",description:"Nombre del documento"},{key:"tipo",header:"Tipo*",required:!0,type:"select",options:["contrato","identificacion","comprobante","legal","fiscal","otro"],example:"contrato",description:"Tipo de documento"},{key:"categoria",header:"CategorÃa",required:!1,type:"text",example:"Legal",description:"CategorÃa del documento"},{key:"fecha_documento",header:"Fecha Documento",required:!1,type:"date",example:"01/01/2024",description:"Fecha del documento"},{key:"fecha_vencimiento",header:"Fecha Vencimiento",required:!1,type:"date",example:"31/12/2024",description:"Fecha de vencimiento"},{key:"notas",header:"Notas",required:!1,type:"text",example:"Notas adicionales",description:"Notas adicionales"}],instructions:["Registra documentos para subir archivos posteriormente"],allowedValues:{tipo:["contrato","identificacion","comprobante","legal","fiscal","otro"]}},inspecciones:{entityType:"inquilinos",displayName:"Inspecciones",columns:[{key:"tipo_inspeccion",header:"Tipo*",required:!0,type:"select",options:["entrada","salida","periodica","emergencia","mantenimiento"],example:"periodica",description:"Tipo de inspección"},{key:"fecha",header:"Fecha*",required:!0,type:"date",example:"15/01/2024",description:"Fecha de la inspección"},{key:"inspector",header:"Inspector",required:!1,type:"text",example:"Juan Pérez",description:"Nombre del inspector"},{key:"estado_general",header:"Estado General",required:!1,type:"select",options:["excelente","bueno","regular","malo","critico"],example:"bueno",description:"Estado general encontrado"},{key:"observaciones",header:"Observaciones",required:!1,type:"text",example:"Sin observaciones",description:"Observaciones de la inspección"},{key:"proxima_inspeccion",header:"Próxima Inspección",required:!1,type:"date",example:"15/07/2024",description:"Fecha de próxima inspección"}],instructions:["Registra inspecciones periódicas de la oficina"],allowedValues:{tipo_inspeccion:["entrada","salida","periodica","emergencia","mantenimiento"],estado_general:["excelente","bueno","regular","malo","critico"]}},siniestros:{entityType:"inquilinos",displayName:"Siniestros",columns:[{key:"tipo_siniestro",header:"Tipo*",required:!0,type:"select",options:["temblor","huracan","inundacion","incendio","robo","vandalismo","explosion","electrico","dano_estructural","fuga_agua","sismo","otro"],example:"inundacion",description:"Tipo de siniestro"},{key:"fecha_siniestro",header:"Fecha Evento",required:!1,type:"date",example:"10/03/2024",description:"Fecha en que ocurrió el siniestro"},{key:"fecha_reporte",header:"Fecha Reporte*",required:!0,type:"date",example:"11/03/2024",description:"Fecha de reporte"},{key:"descripcion",header:"Descripción*",required:!0,type:"text",example:"Fuga de agua en baño principal",description:"Resumen o descripción del siniestro"},{key:"status",header:"Estado",required:!1,type:"select",options:["reportado","en_proceso","resuelto","rechazado","cerrado"],example:"reportado",description:"Estado del siniestro"},{key:"monto_estimado",header:"Costo Estimado",required:!1,type:"number",example:"15000",description:"Monto estimado de daños"},{key:"monto_reclamado",header:"Monto Reclamado",required:!1,type:"number",example:"15000",description:"Monto reclamado a aseguradora"},{key:"monto_pagado",header:"Costo Final",required:!1,type:"number",example:"12000",description:"Costo final / monto pagado"},{key:"aseguradora",header:"Aseguradora",required:!1,type:"text",example:"Seguros XYZ",description:"CompañÃa aseguradora"},{key:"numero_poliza",header:"No. Póliza",required:!1,type:"text",example:"POL-12345",description:"Número de póliza"},{key:"numero_siniestro",header:"Número Reclamo",required:!1,type:"text",example:"RCL-2024-001",description:"Número de reclamo o siniestro asignado"},{key:"notas",header:"Notas",required:!1,type:"text",example:"Notas adicionales",description:"Notas adicionales"}],instructions:["Registra siniestros para seguimiento y reclamaciones"],allowedValues:{tipo_siniestro:["temblor","huracan","inundacion","incendio","robo","vandalismo","explosion","electrico","dano_estructural","fuga_agua","sismo","otro"],status:["reportado","en_proceso","resuelto","rechazado","cerrado"]}}};async function pa(u,a,s,m){if(u==="inquilinos"){const _=[a.nombre,a.apellido_paterno,a.apellido_materno].filter(
1Boolean).join(" ").trim();return v.from("office_tenants").insert({office_id:s,owner_id:m,nombre:_||a.nombre,empresa:a.empresa,email:a.email,telefono:a.telefono,telefono_emergencia:a.telefono_emergencia,rfc:a.rfc,direccion_anterior:a.direccion_anterior,referencias:a.referencias,notas:a.notas,tipo_inquilino:a.tipo_inquilino||"persona_fisica",status:"activo"})}if(u==="contratos"){const _=E(a.fecha_inicio)||new Date().toISOString().split("T")[0];return v.from("office_contracts").insert({office_id:s,owner_id:m,tipo_contrato:a.tipo_contrato||"arrendamiento",fecha_inicio:_,fecha_fin:E(a.fecha_fin),monto_renta:a.monto_renta?parseFloat(a.monto_renta):0,deposito:a.deposito?parseFloat(a.deposito):null,dia_pago:a.dia_pago?parseInt(a.dia_pago):1,incremento_anual:a.incremento_anual?parseFloat(a.incremento_anual):null,notas:a.notas,status:"pendiente",tenant_id:null})}return u==="documentos"?v.from("office_documents").insert({office_id:s,owner_id:m,nombre:a.nombre,tipo:a.tipo||"otro",categoria:a.categoria,archivo_url:"pending",fecha_documento:E(a.fecha_documento),fecha_vencimiento:E(a.fecha_vencimiento),notas:a.notas}):u==="inspecciones"?v.from("office_inspections").insert({office_id:s,owner_id:m,tipo_inspeccion:a.tipo_inspeccion||"periodica",fecha:E(a.fecha)||new Date().toISOString().split("T")[0],inspector:a.inspector,estado_general:a.estado_general,observaciones:a.observaciones,proxima_inspeccion:E(a.proxima_inspeccion),status:"completada"}):u==="siniestros"?v.from("office_siniestros").insert({office_id:s,owner_id:m,tipo_siniestro:a.tipo_siniestro||"otro",descripcion:a.descripcion||"Sin descripción",fecha_reporte:E(a.fecha_reporte)||new Date().toISOString().split("T")[0],fecha_siniestro:a.fecha_siniestro?E(a.fecha_siniestro):null,status:a.status||"reportado",monto_estimado:a.monto_estimado?parseFloat(a.monto_estimado):null,monto_reclamado:a.monto_reclamado?parseFloat(a.monto_reclamado):null,monto_pagado:a.monto_pagado?parseFloat(a.monto_pagado):null,aseguradora:a.aseguradora||null,numero_poliza:a.numero_poliza||null,numero_siniestro:a.numero_siniestro||null,
1notas:a.notas||null}):u==="ingresos"?v.from("office_incomes").insert({office_id:s,owner_id:m,tenant_id:null,concepto:a.concepto||"Ingreso importado",monto:a.monto?parseFloat(a.monto):0,fecha:E(a.fecha)||new Date().toISOString().split("T")[0],metodo_pago:a.metodo_pago,referencia:a.referencia,notas:a.notas,status:"pendiente_asignacion"}):u==="egresos"?v.from("office_expenses").insert({office_id:s,owner_id:m,concepto:a.concepto||"Egreso importado",categoria:a.categoria||"otro",monto:a.monto?parseFloat(a.monto):0,fecha:E(a.fecha)||new Date().toISOString().split("T")[0],status:a.status||"pendiente",metodo_pago:a.metodo_pago||null,fecha_pago:a.fecha_pago?E(a.fecha_pago):null,cuenta_origen:a.cuenta_origen||null,referencia_pago:a.referencia_pago||null,numero_factura:a.numero_factura||null,notas:a.notas||null}):u==="proveedores"?v.from("proveedores").insert({owner_id:m,nombre:a.nombre,categoria:a.tipo||"general",contacto:a.contacto,telefono:a.telefono?String(a.telefono):null,email:a.email,direccion:a.direccion,rfc:a.rfc,estado:"activo"}):{error:new Error(`Unknown entity type: ${u}`)}}function ua({open:u,onOpenChange:a,entityType:s,onImportComplete:m}){const{currentUser:_}=ue(),{selectedUnitId:q}=ee(),{tenants:T}=re(),[o,f]=p.useState("upload"),[g,i]=p.useState(null),[j,y]=p.useState(!1),[h,C]=p.useState([]),[F,P]=p.useState(0),[n,r]=p.useState(!1),c=ma[s],l=_==null?void 0:_.profileId,d=s!=="contratos"||T.length>0,O=()=>{const x=L.book_new(),D=c.columns.map(k=>k.header),N=c.columns.map(k=>k.example),w=L.aoa_to_sheet([D,N]);w["!cols"]=c.columns.map(()=>({wch:20})),L.book_append_sheet(x,w,"Datos");const S=[["Instrucciones de Importación"],[""],['1. Complete los datos en la hoja "Datos"'],["2. Los campos marcados con * son obligatorios"],["3. Las fechas deben estar en formato DD/MM/AAAA"],["4. Los montos deben ser números sin sÃmbolos de moneda"],[""],["Columnas:"]];c.columns.forEach(k=>{var me;let z=`- ${k.header}: ${k.required?"Obligatorio":"Opcional"}`;(me=k.options)!=null&&me.length&&(z+=` | Valores válidos: ${k.options.join(", ")}`),S.push([z])}),c.instructions.forEach(k=>{S.push([""]),S.push([k])});const B=L.aoa_to_sheet(S);B["!cols"]=[{wch:80}],L.book_append_sheet(x,B,"Instrucciones"),Ye(x,`plantilla_${s}.xlsx`),b.success("Plantilla descargada")},M=p.useCallback(x=>{const D=new FileReader;D.onload=N=>{var w;try{const S=new Uint8Array((w=N.target)==null?void 0:w.result),B=He(S,{type:"array"}),k=B.Sheets[B.SheetNames[0]],z=L.sheet_to_json(k,{defval:""});if(z.length===0){b.error("El archivo está vacÃo");return}i({headers:Object.keys(z[0]),rows:z}),y(!0)}catch{b.error("Error al leer el archivo")}},D.readAsArrayBuffer(x)},[]),A=p.useCallback(x=>{x.length>0&&M(x[0])}
1,[M]),{getRootProps:t,getInputProps:xe,isDragActive:le}=Xe({onDrop:A,accept:{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":[".xlsx"],"application/vnd.ms-excel":[".xls"],"text/csv":[".csv"]},maxFiles:1}),ge=x=>{if(y(!1),!g)return;const D=g.rows.map(N=>{const w={};return x.forEach(S=>{S.targetKey&&S.sourceColumn in N&&(w[S.targetKey]=N[S.sourceColumn])}),w}).filter(N=>Object.keys(N).length>0);C(D),f("preview")},ye=async()=>{if(!l||!q){b.error("No hay oficina seleccionada");return}f("importing");let x=0;try{for(const D of h){const{error:N}=await pa(s,D,q,l);N?console.error("Error importing row:",N,D):x++}P(x),f("complete"),b.success(`${x} registros importados`),m==null||m()}catch{b.error("Error durante la importación"),f("preview")}},_e=()=>{f("upload"),i(null),C([]),P(0),y(!1)},de=x=>{x||_e(),a(x)};return e.jsxs(e.Fragment,{children:[e.jsx(ae,{open:u,onOpenChange:de,children:e.jsxs(te,{className:"max-w-2xl",children:[e.jsxs(oe,{children:[e.jsxs(ne,{className:"flex items-center gap-2",children:[e.jsx(Je,{className:"h-5 w-5 text-primary"}),"Importar ",c.displayName]}),e.jsx(ie,{children:"Importa múltiples registros desde un archivo Excel"})]}),o==="upload"&&e.jsxs("div",{className:"space-y-4",children:[!d&&e.jsxs(Ge,{variant:"destructive",children:[e.jsx(ve,{className:"h-4 w-4"}),e.jsx(Ke,{children:"No puedes importar contratos porque no hay inquilinos registrados. Primero registra o importa inquilinos."})]}),e.jsxs(I,{variant:"outline",onClick:()=>r(!0),className:"w-full gap-2",children:[e.jsx(Ze,{className:"h-4 w-4"}),"Descargar Plantilla"]}),d&&e.jsxs("div",{...t(),className:`border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-colors ${le?"border-primary bg-primary/5":"border-muted-foreground/25 hover:border-primary/50"}`,children:[e.jsx("input",{...xe()}),e.jsx(fe,{className:"h-10 w-10 mx-auto mb-4 text-muted-foreground"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:le?"Suelta el archivo aquÃ":"Arrastra un archivo o haz clic para seleccionar"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Formatos: .xlsx, .xls, .csv"})]})]}),o==="preview"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"bg-muted/50 rounded-lg p-4 flex items-center gap-2",children:[e.jsx(Qe,{className:"h-4 w-4 text-primary"}),e.jsxs("p",{className:"text-sm font-medium",children:[h.length," registros mapeados correctamente"]})]}),e.jsxs("div",{className:"max-h-64 overflow-auto border rounded-lg",children:[e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"bg-muted sticky top-0",children:e.jsx("tr",{children:c.columns.slice(0,4).map(x=>e.jsx("th",{className:"text-left p-2 font-medium",children:x.header.replace("*","")},x.key))})}),e.jsx("tbody",{children:h.slice(0,10).map((x,D)=>e.jsx("tr",{className:"border-t",children:c.columns.slice(0,4).map(N=>e.jsx("td",{className:"p-2 truncate max-w-[150px]",children:x[N.key]||"-"},N.key))},D))})]}),h.length>10&&e.jsxs("p",{className:"text-xs text-muted-foreground p-2 text-center",children:["Y ",h.length-10," más..."]})]}),e.jsxs(se,{children:[e.jsx(I,{variant:"outline",onClick:()=>{f("upload"),i(null),C([])},children:"Volver"}),e.jsxs(I,{onClick:ye,disabled:h.length===0,children:["Importar ",h.length," registros"]})]})]}),o==="importing"&&e.jsxs("div",{className:"flex flex-col items-center justify-center py-8",children:[e.jsx(G,{className:"h-10 w-10 animate-spin text-primary mb-4"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Importando registros..."})]}),o==="complete"&&e.jsxs("div",{className:"text-center py-8 space-y-4",children:[e.jsx(ea,{className:"h-12 w-12 text-green-500 mx-auto"}),e.jsxs("h3",{className:"text-lg font-semibold",children:[F," registros importados"]}),e.jsx(I,{onClick:de.bind(null,!1),children:"Cerrar"})]})]})}),j&&g&&e.jsx(We,{open:j,onOpenChange:y,sourceHeaders:g.headers,template:c,onMappingComplete:ge}),e.jsx($e,{open:n,onOpenChange:r,onDownload:O,templateConfig:c})]})}function fa({open:u,onOpenChange:a,contract:s,onAssignComplete:m}){const{tenants:_,loading:q,refetch:T}=re(),{contracts:o,updateContract:f}=ce(),[g,i]=p.useState(""),[j,y]=p.useState(!1),h=new Set(o.filter(l=>l.status==="activo"&&l.tenantId).map(l=>l.tenantId)),C=_.filter(l=>!h.has(l.id)),F=C.length>0,n=s?(l=>aa(l.fechaInicio,l.fechaFin)==="activo"?"activo":"terminado")(s)==="activo":!1,r=async()=>
1{if(!(!s||!g)){y(!0);try{const l=n?"activo":"terminado",d=n?"activo":"historico";if(n){const M=o.filter(A=>A.officeId===s.officeId&&A.status==="activo"&&A.id!==s.id);for(const A of M)await v.from("office_contracts").update({status:"terminado"}).eq("id",A.id),A.tenantId&&await v.from("office_tenants").update({status:"historico"}).eq("id",A.tenantId)}await f(s.id,{tenantId:g,status:l}),await v.from("office_tenants").update({status:d}).eq("id",g);const O=n?"Inquilino asignado correctamente. El contrato ahora está activo.":"Inquilino asignado a contrato histórico.";b.success(O),i(""),a(!1),T(),m==null||m()}catch{b.error("Error al asignar el inquilino")}finally{y(!1)}}},c=()=>{i(""),a(!1)};return s?e.jsx(ae,{open:u,onOpenChange:c,children:e.jsxs(te,{className:"max-w-md",children:[e.jsxs(oe,{children:[e.jsxs(ne,{className:"flex items-center gap-2",children:[e.jsx(H,{className:"h-5 w-5 text-primary"}),"Asignar Inquilino"]}),e.jsx(ie,{children:"Asigna un inquilino a este contrato para activarlo"})]}),q?e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(G,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):F?e.jsxs("div",{className:"space-y-4 py-4",children:[!n&&e.jsx("div",{className:"p-3 rounded-lg bg-muted/50 border border-muted-foreground/20",children:e.jsxs("p",{className:"text-sm text-muted-foreground",children:[e.jsx(pe,{className:"h-4 w-4 inline mr-2"}),"Este contrato tiene un perÃodo anterior. Se asignará como ",e.jsx("strong",{children:"histórico"}),"."]})}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(R,{children:"Selecciona el inquilino"}),e.jsxs(Y,{value:g,onValueChange:i,children:[e.jsx(W,{className:Ne(!g&&"text-muted-foreground"),children:e.jsx(J,{placeholder:"Seleccionar inquilino disponible"})}),e.jsx(Z,{children:C.map(l=>e.jsx(Q,{value:l.id,children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{children:l.nombre}),l.empresa&&e.jsx("span",{className:"text-xs text-muted-foreground",children:l.empresa})]})},l.id))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Solo se muestran inquilinos sin contrato activo (relación 1:1)"})]})]}):e.jsxs("div",{className:"flex flex-col items-center py-6 gap-4",children:[e.jsx("div",{className:"h-16 w-16 rounded-full bg-warning/10 flex items-center justify-center",children:e.jsx(pe,{className:"h-8 w-8 text-warning"})}),e.jsx("p",{className:"text-sm text-muted-foreground text-center max-w-sm",children:_.length===0?"No hay inquilinos registrados. Registra primero un inquilino para poder asignarlo al contrato.":"Todos los inquilinos ya tienen un contrato activo asignado. Registra un nuevo inquilino o finaliza un contrato existente."})]}),e.jsxs(se,{className:"gap-2 sm:gap-0",children:[e.jsx(I,{variant:"outline",onClick:c,children:"Cancelar"}),F&&e.jsxs(I,{onClick:r,disabled:j||!g,children:[j&&e.jsx(G,{className:"h-4 w-4 mr-2 animate-spin"}),n?"Asignar y Activar":"Asignar como Histórico"]})]})]})}):null}const ha=[{value:"activo",label:"Activo"},{value:"pendiente",label:"Pendiente"},{value:"vencido",label:"Vencido"},{value:"terminado",label:"Terminado"}];function xa({open:u,onOpenChange:a,contract:s,onSuccess:m}){const{updateContract:_}=ce(),[q,T]=p.useState(!1),[o,f]=p.useState({tipoContrato:"arrendamiento",fechaInicio:"",fechaFin:"",montoRenta:"",deposito:"",diaPago:"1",incrementoAnual:"",notas:"",status:"activo"});p.useEffect(()=>{var i,j,y,h,C,F;s&&u&&f({tipoContrato:s.tipoContrato||"arrendamiento",fechaInicio:((i=s.fechaInicio)==null?void 0:i.split("T")[0])||"",fechaFin:((j=s.fechaFin)==null?void 0:j.split("T")[0])||"",montoRenta:((y=s.montoRenta)==null?void 0:y.toString())||"",deposito:((h=s.deposito)==null?void 0:h.toString())||"",diaPago:((C=s.diaPago)==null?void 0:C.toString())||"1",incrementoAnual:((F=s.incrementoAnual)==null?void 0:F.toString())||"",notas:s.notas||"",status:s.status||"activo"})},[s,u]);const g=async i=>{if(i.preventDefault(),!!s){if(!o.fechaInicio||!o.montoRenta){b.error("Fecha de inicio y monto de renta son requeridos");return}T(!0);try{await _(s.id,{tipoContrato:o.tipoContrato,fechaInicio:o.fechaInicio,fechaFin:o.fechaFin||void 0,montoRenta:parseFloat(o.montoRenta),deposito:o.deposito?parseFloat(o.deposito):void 0,diaPago:parseInt(o.diaPago)||1,incrementoAnual:o.incrementoAnual?parseFloat(o.incrementoAnual):void 0,notas:o.notas.trim()||void 0,status:o.status}),b.success("Contrato actualizado correctamente"),m==null||m(),a(!1)}catch(j){console.error("Error updating contract:",j),b.error("Error al actualizar el contrato")}finally{T(!1)}}};return s?e.jsx(ae,{open:u,onOpenChange:a,children:e.jsxs(te,{className:"max-w-lg max-h-[90vh] overflow-y-auto",children:[e.jsxs(oe,{children:[e.jsxs(ne,{className:"flex items-center gap-2",children:[e.jsx(he,{className:"h-5 w-5 text-primary"}),"Editar Contrato"]}),e.jsx(ie,{children:"Modifica los datos del contrato"})]}),e.jsxs("form",{onSubmit:g,className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(R,{htmlFor:"tipoContrato",children:"Tipo de Contrato"}),e.jsx(Ve,{tipoContrato:o.tipoContrato})]}),e.jsxs(Y,{value:o.tipoContrato,onValueChange:i=>f({...o,tipoContrato:i}),children:[e.jsx(W,{id:"tipoContrato",children:e.jsx(J,{})}),e.jsx(Z,{children:oa.map(i=>e.jsx(Q,{value:i.value,children:i.label},i.value))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(R,{htmlFor:"status",children:"Estado"}),e.jsxs(Y,{value:o.status,onValueChange:i=>f({...o,status:i}),children:[e.jsx(W,{id:"status",children:e.jsx(J,{})}),e.jsx(Z,{children:ha.map(i=>e.jsx(Q,{value:i.value,children:i.label},i.value))})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(R,{htmlFor:"fe
1chaInicio",children:"Fecha Inicio *"}),e.jsx(V,{id:"fechaInicio",type:"date",value:o.fechaInicio,onChange:i=>f({...o,fechaInicio:i.target.value}),required:!0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(R,{htmlFor:"fechaFin",children:"Fecha Fin"}),e.jsx(V,{id:"fechaFin",type:"date",value:o.fechaFin,onChange:i=>f({...o,fechaFin:i.target.value})})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(R,{htmlFor:"montoRenta",children:"Monto Renta *"}),e.jsx(V,{id:"montoRenta",type:"number",min:"0.01",step:"0.01",value:o.montoRenta,onChange:i=>f({...o,montoRenta:i.target.value}),placeholder:"0.00",required:!0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(R,{htmlFor:"deposito",children:"Depósito"}),e.jsx(V,{id:"deposito",type:"number",min:"0",step:"0.01",value:o.deposito,onChange:i=>f({...o,deposito:i.target.value}),placeholder:"0.00"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(R,{htmlFor:"diaPago",children:"DÃa de Pago"}),e.jsx(V,{id:"diaPago",type:"number",min:"1",max:"31",value:o.diaPago,onChange:i=>f({...o,diaPago:i.target.value})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(R,{htmlFor:"incrementoAnual",children:"Incremento Anual (%)"}),e.jsx(V,{id:"incrementoAnual",type:"number",min:"0",step:"0.1",value:o.incrementoAnual,onChange:i=>f({...o,incrementoAnual:i.target.value}),placeholder:"0.0"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(R,{htmlFor:"notas",children:"Notas"}),e.jsx(ta,{id:"notas",value:o.notas,onChange:i=>f({...o,notas:i.target.value}),placeholder:"Información adicional...",rows:2})]}),e.jsxs(se,{children:[e.jsx(I,{type:"button",variant:"outline",onClick:()=>a(!1),children:"Cancelar"}),e.jsxs(I,{type:"submit",disabled:q,children:[q&&e.jsx(G,{className:"h-4 w-4 mr-2 animate-spin"}),"Guardar Cambios"]})]})]})]})}):null}function Rt(){const u=Ce(),{selectedUnitId:a,selectedUnitTitle:s,isFilteringByUnit:m}=ee(),{contracts:_,loading:q,deleteContract:T,refetch:o,createContract:f}=ce(),{tenants:g}=re(),[i,j]=p.useState(!1),[y,h]=p.useState(!1),[C,F]=p.useState(null),[P,n]=p.useState(null),[r,c]=p.useState(!1),[l,d]=p.useState(null),O=async()=>{if(P){c(!0);try{await T(P),b.success("Contrato eliminado correctamente")}catch{b.error("Error al eliminar el contrato")}finally{c(!1),n(null)}}},M=t=>{switch(t){case"activo":return e.jsx(U,{variant:"default",className:"bg-primary/10 text-primary border-primary/30",children:"Activo"});case"pendiente":return e.jsx(U,{variant:"outline",className:"border-warning text-warning",children:"Pendiente"});case"vencido":return e.jsx(U,{variant:"destructive",children:"Vencido"});case"terminado":return e.jsx(U,{variant:"secondary",children:"Terminado"});default:return e.jsx(U,{variant:"secondary",children:t})}},A=[{header:"Tipo",accessor:"tipoContrato",cell:t=>e.jsx("span",{className:"capitalize font-medium",children:t.tipoContrato}),sortable:!0,sortKey:"tipoContrato"},{header:"Inquilino",accessor:"tenantName",cell:t=>t.tenantName?e.jsx("span",{children:t.tenantName}):e.jsxs("button",{onClick:()=>F(t),className:"text-warning text-xs underline underline-offset-2 hover:text-warning/80 flex items-center gap-1",children:[e.jsx(H,{className:"h-3 w-3"}),"Asignar"]}),sortable:!0,sortKey:"tenantName"},{header:"Inicio",accessor:"fechaInicio",cell:t=>e.jsx("span",{className:"text-sm",children:$(new Date(t.fechaInicio),"dd MMM yyyy",{locale:X})}),sortable:!0,sortKey:"fechaInicio"},{header:"Fin",accessor:"fechaFin",cell:t=>t.fechaFin?e.jsx("span",{className:"text-sm",children:$(new Date(t.fechaFin),"dd MMM yyyy",{locale:X})}):e.jsx("span",{className:"text-muted-foreground text-xs",children:"â"}),sortable:!0,sortKey:"fechaFin"},{header:"Renta",accessor:"montoRenta",cell:t=>e.jsxs("span",{className:"font-semibold text-primary",children:[ke(t.montoRenta),"/mes"]}),sortable:!0,sortKey:"montoRenta"},{header:"Estado",accessor:"status",cell:t=>M(t.status),sortable:!0,sortKey:"status"},{header:"Registro",accessor:"createdAt",cell:t=>e.jsx("span",{className:"text-sm text-muted-foreground",children:$(new Date(t.createdAt),"dd MMM yyyy",{locale:X})}),sortable:!0,sortKey:"createdAt"},{header:"",cell:t=>e.jsxs(Ae,{children:[e.jsx(De,{asChild:!0,children:e.jsx(I,{variant:"ghost",size:"icon",className:"h-8 w-8",children:e.jsx(la,{className:"h-4 w-4"})})}),e.jsxs(Se,{align:"end",children:[t.status==="pendiente"&&e.jsxs(K,{onClick:()=>
1F(t),children:[e.jsx(H,{className:"h-4 w-4 mr-2"}),"Asignar Inquilino"]}),e.jsxs(K,{onClick:()=>d(t),children:[e.jsx(he,{className:"h-4 w-4 mr-2"}),"Editar"]}),e.jsxs(K,{className:"text-destructive",onClick:()=>n(t.id),children:[e.jsx(da,{className:"h-4 w-4 mr-2"}),"Eliminar"]})]})]}),className:"w-10"}];return m?e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(Ie,{moduleTitle:"Contratos",unitType:"offices",actions:e.jsxs(e.Fragment,{children:[e.jsxs(I,{variant:"outline",onClick:()=>h(!0),className:"gap-2",children:[e.jsx(fe,{className:"h-4 w-4"}),"Importar"]}),e.jsxs(I,{onClick:()=>j(!0),className:"gap-2",children:[e.jsx(ra,{className:"h-4 w-4"}),"Nuevo Contrato"]})]})}),e.jsx("div",{className:"container mx-auto px-4 py-6",children:q?e.jsx("div",{className:"flex items-center justify-center h-64",children:e.jsx("div",{className:"animate-pulse text-muted-foreground",children:"Cargando contratos..."})}):e.jsx(qe,{children:e.jsx(Fe,{className:"p-0",children:e.jsx(na,{data:_,columns:A,keyExtractor:t=>t.id,emptyMessage:"No hay contratos registrados",emptyIcon:e.jsx(ca,{className:"h-12 w-12 text-muted-foreground/50 mx-auto"}),itemsPerPage:10})})})}),e.jsx(Be,{open:i,onOpenChange:t=>{j(t),t||o()},config:Ue,tenants:g.map(t=>({id:t.id,nombre:t.nombre,status:t.status})),existingContracts:_.map(t=>({id:t.id,fechaInicio:t.fechaInicio,fechaFin:t.fechaFin||null})),entityId:a||"",entityTitle:s||void 0,onSubmit:async t=>{await f({officeId:t.officeId,fechaInicio:t.fechaInicio,montoRenta:t.montoRenta,tenantId:t.tenantId,tipoContrato:t.tipoContrato,fechaFin:t.fechaFin,fechaFinManual:t.fechaFinManual,fechaFirma:t.fechaFirma,deposito:t.deposito,depositoGarantia:t.depositoGarantia,diaPago:t.diaPago,incrementoAnual:t.incrementoAnual,notas:t.notas,moneda:t.moneda,status:t.status})},onGoToTenants:()=>u("/dashboard/oficinas/inquilinos")}),e.jsx(ua,{open:y,onOpenChange:h,entityType:"contratos",onImportComplete:o}),e.jsx(fa,{open:!!C,onOpenChange:t=>!t&&F(null),contract:C,onAssignComplete:o}),e.jsx(xa,{open:!!l,onOpenChange:t=>!t&&d(null),contract:l,onSuccess:o}),e.jsx(Ee,{open:!!P,onOpenChange:()=>n(null),children:e.jsxs(Te,{children:[e.jsxs(Re,{children:[e.jsx(Me,{children:"¿Eliminar contrato?"}),e.jsx(Pe,{children:"Esta acción no se puede deshacer."})]}),e.jsxs(Oe,{children:[e.jsx(we,{children:"Cancelar"}),e.jsx(ze,{onClick:O,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",disabled:r,children:r?"Eliminando...":"Eliminar"})]})]})})]}):e.jsxs("div",{className:"min-h-screen bg-background flex flex-col items-center justify-center gap-4",children:[e.jsx(ia,{className:"h-12 w-12 text-muted-foreground"}),e.jsx("p",{className:"text-muted-foreground",children:"Selecciona una oficina para ver sus contratos"}),e.jsx(I,{variant:"outline",asChild:!0,children:e.jsxs(be,{to:"/dashboard/propiedades-tipo/oficinas",children:[e.jsx(sa,{className:"h-4 w-4 mr-2"}),"Ver edificios de oficinas"]})})]})}export{Rt 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.