Files
portal-requisicion-vacantes/dist/assets/NewRequisitionPage-BNRyF6PF.js
T
2026-08-26 16:31:12 -04:00

2 lines
15 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{u as S,o as P,r as c,p as E,j as e,c as w,q as R,v as k,t as A}from"./index-kE4_6-nI.js";import{P as T}from"./PageHeader-BIrj68Xg.js";const I=[{id:1,label:"Vacante",helper:"Qué y dónde"},{id:2,label:"Contexto",helper:"Por qué y cuándo"},{id:3,label:"Compensación",helper:"Presupuesto"},{id:4,label:"Revisión",helper:"Confirmar"}],L={country:"",city:"",position:"",vacancyType:"Nueva",quantity:1,duration:"",startDate:"",client:"",replacementName:"",replacementExitDate:"",justification:"",comments:"",budget:"",salaryPackage:"",currency:"USD"};function O(){const{createRequisition:x}=S(),j=P(),[r,t]=c.useState(1),[a,v]=c.useState(L),[i,p]=c.useState({}),y=a.country?E[a.country]??[]:[],d=a.vacancyType!=="Nueva",o=/gerente|manager|coordinador|supervisor/i.test(a.position)?3:/analista|desarrollador|representante/i.test(a.position)?2:1,m=o===1?5:o===2?10:15,b=m+Math.max(0,a.quantity-1)*2,u=a.startDate?new Date(a.startDate).getTime()-Date.now()>25*864e5:!1,l=(s,n)=>{v(h=>({...h,[s]:n,...s==="country"?{city:""}:{}})),i[s]&&p(h=>({...h,[s]:""}))},f=s=>{const n={};return s===1&&(a.country||(n.country="Selecciona el país."),a.city||(n.city="Selecciona la ciudad."),a.position||(n.position="Selecciona la posición."),a.duration.trim()||(n.duration="Indica la duración."),a.startDate||(n.startDate="Indica la fecha de inicio."),a.client||(n.client="Selecciona el cliente o proyecto."),a.quantity<1&&(n.quantity="La cantidad mínima es 1.")),s===2&&(d&&!a.replacementName.trim()&&(n.replacementName="Indica la persona o posición que se reemplaza."),d&&!a.replacementExitDate&&(n.replacementExitDate="Indica la fecha de salida."),a.justification.trim().length<20&&(n.justification="Explica el motivo con al menos 20 caracteres.")),s===3&&((!a.budget||Number(a.budget)<=0)&&(n.budget="Indica un presupuesto mayor que cero."),a.salaryPackage.trim().length<8&&(n.salaryPackage="Describe el paquete salarial.")),p(n),Object.keys(n).length===0},N=()=>{f(r)&&t(s=>Math.min(4,s+1))},g=()=>t(s=>Math.max(1,s-1)),C=c.useMemo(()=>({...a,country:a.country||"Sin definir",city:a.city||"Sin definir",position:a.position||"Posición sin definir",duration:a.duration||"Sin definir",startDate:a.startDate||new Date().toISOString().slice(0,10),client:a.client||"Sin definir"}),[a]),q=()=>{x(C,!0),j("/mis-requisiciones")},D=()=>{const s=x(a,!1);j(`/requisiciones/${s}`)};return e.jsxs("div",{className:"page-stack form-page",children:[e.jsx(T,{eyebrow:"Coordinación · Nueva solicitud",title:"Requisición de personal",description:"Completa lo esencial. La ruta de aprobación y el SLA se generan al enviar."}),e.jsx("ol",{className:"form-stepper","aria-label":"Progreso del formulario",children:I.map(s=>e.jsx("li",{className:`${r===s.id?"is-current":""}${r>s.id?" is-complete":""}`,children:e.jsxs("button",{type:"button",disabled:s.id>r,onClick:()=>t(s.id),children:[e.jsx("span",{children:r>s.id?"✓":String(s.id).padStart(2,"0")}),e.jsx("b",{children:s.label}),e.jsx("small",{children:s.helper})]})},s.id))}),e.jsxs("div",{className:"form-layout",children:[e.jsxs("form",{className:"requisition-form",onSubmit:s=>s.preventDefault(),noValidate:!0,children:[r===1?e.jsxs("section",{className:"form-section","aria-labelledby":"step-1-title",children:[e.jsxs("header",{children:[e.jsx("p",{children:"PASO 01"}),e.jsx("h2",{id:"step-1-title",children:"Información de la vacante"}),e.jsx("span",{children:"Tipo, cantidad y duración se definen primero para calcular correctamente IDs y SLA."})]}),e.jsxs("div",{className:"field-grid",children:[e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["País ",e.jsx("b",{children:"*"})]}),e.jsxs("select",{value:a.country,onChange:s=>l("country",s.target.value),className:i.country?"is-invalid":"",children:[e.jsx("option",{value:"",children:"Seleccionar país"}),w.map(s=>e.jsx("option",{children:s},s))]}),i.country?e.jsx("small",{className:"field-error",children:i.country}):null]}),e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["Ciudad / zona ",e.jsx("b",{children:"*"})]}),e.jsxs("select",{value:a.city,disabled:!a.country,onChange:s=>l("city",s.target.value),className:i.city?"is-invalid":"",children:[e.jsx("option",{value:"",children:a.country?"Seleccionar ciudad":"Primero selecciona el país"}),y.map(s=>e.jsx("option",{children:s},s))]}),i.city?e.jsx("small",{className:"field-error",children:i.city}):null]}),e.jsxs("label",{className:"field field--wide",children:[e.jsxs("span",{children:["Posición ",e.jsx("b",{children:"*"})]}),e.jsxs("select",{value:a.position,onChange:s=>l("position",s.target.value),className:i.position?"is-invalid":"",children:[e.jsx("option",{value:"",children:"Seleccionar posición"}),R.map(s=>e.jsx("option",{children:s},s))]}),i.position?e.jsx("small",{className:"field-error",children:i.position}):null]}),e.jsxs("fieldset",{className:"field field--wide choice-field",children:[e.jsxs("legend",{children:["Tipo de vacante ",e.jsx("b",{children:"*"})]}),e.jsx("div",{children:k.map(s=>e.jsxs("label",{className:a.vacancyType===s?"is-selected":"",children:[e.jsx("input",{type:"radio",name:"vacancyType",value:s,checked:a.vacancyType===s,onChange:()=>l("vacancyType",s)}),e.jsx("span",{children:s})]},s))})]}),e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["Cantidad de vacantes ",e.jsx("b",{children:"*"})]}),e.jsxs("div",{className:"number-control",children:[e.jsx("button",{type:"button",onClick:()=>l("quantity",Math.max(1,a.quantity-1)),"aria-label":"Restar una vacante",children:""}),e.jsx("input",{type:"number",min:"1",max:"99",value:a.quantity,onChange:s=>l("quantity",Math.max(1,Number(s.target.value)))}),e.jsx("button",{type:"button",onClick:()=>l("quantity",Math.min(99,a.quantity+1)),"aria-label":"Agregar una vacante",children:"+"})]}),i.quantity?e.jsx("small",{className:"field-error",children:i.quantity}):e.jsxs("small",{children:["Se crearán ",a.quantity," IDs individuales bajo una sola solicitud."]})]}),e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["Duración de la posición ",e.jsx("b",{children:"*"})]}),e.jsx("input",{value:a.duration,onChange:s=>l("duration",s.target.value),placeholder:"Ej. Indefinida, 6 meses",className:i.duration?"is-invalid":""}),i.duration?e.jsx("small",{className:"field-error",children:i.duration}):null]}),e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["Fecha de inicio requerida ",e.jsx("b",{children:"*"})]}),e.jsx("input",{type:"date",value:a.startDate,onChange:s=>l("startDate",s.target.value),className:i.startDate?"is-invalid":""}),i.startDate?e.jsx("small",{className:"field-error",children:i.startDate}):null]}),e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["Cliente / proyecto ",e.jsx("b",{children:"*"})]}),e.jsxs("select",{value:a.client,onChange:s=>l("client",s.target.value),className:i.client?"is-invalid":"",children:[e.jsx("option",{value:"",children:"Seleccionar cliente o proyecto"}),A.map(s=>e.jsx("option",{children:s},s))]}),i.client?e.jsx("small",{className:"field-error",children:i.client}):null]})]})]}):null,r===2?e.jsxs("section",{className:"form-section","aria-labelledby":"step-2-title",children:[e.jsxs("header",{children:[e.jsx("p",{children:"PASO 02"}),e.jsx("h2",{id:"step-2-title",children:"Contexto de la solicitud"}),e.jsx("span",{children:"La información condicional aparece solo cuando realmente hace falta."})]}),e.jsxs("div",{className:"field-grid",children:[d?e.jsxs("div",{className:"conditional-fields field--wide",children:[e.jsxs("p",{children:["Datos de ",a.vacancyType.toLowerCase()]}),e.jsxs("div",{className:"field-grid",children:[e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["Persona o posición a reemplazar ",e.jsx("b",{children:"*"})]}),e.jsx("input",{value:a.replacementName,onChange:s=>l("replacementName",s.target.value),className:i.replacementName?"is-invalid":""}),i.replacementName?e.jsx("small",{className:"field-error",children:i.replacementName}):null]}),e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["Fecha de salida ",e.jsx("b",{children:"*"})]}),e.jsx("input",{type:"date",value:a.replacementExitDate,onChange:s=>l("replacementExitDate",s.target.value),className:i.replacementExitDate?"is-invalid":""}),i.replacementExitDate?e.jsx("small",{className:"field-error",children:i.replacementExitDate}):null]})]})]}):null,e.jsxs("label",{className:"field field--wide",children:[e.jsxs("span",{children:["Justificación de la requisición ",e.jsx("b",{children:"*"})]}),e.jsx("textarea",{rows:6,value:a.justification,onChange:s=>l("justification",s.target.value),placeholder:"Describe el motivo, el impacto operativo y por qué se necesita ahora…",className:i.justification?"is-invalid":""}),i.justification?e.jsx("small",{className:"field-error",children:i.justification}):e.jsxs("small",{children:[a.justification.length," caracteres · mínimo 20"]})]}),e.jsxs("label",{className:"field field--wide",children:[e.jsx("span",{children:"Comentarios adicionales"}),e.jsx("textarea",{rows:4,value:a.comments,onChange:s=>l("comments",s.target.value),placeholder:"Uniformes, horario, requisitos de movilidad u otra aclaración relevante…"})]})]})]}):null,r===3?e.jsxs("section",{className:"form-section","aria-labelledby":"step-3-title",children:[e.jsxs("header",{children:[e.jsx("p",{children:"PASO 03"}),e.jsx("h2",{id:"step-3-title",children:"Compensación y presupuesto"}),e.jsx("span",{children:"Estos datos solo serán visibles para los roles autorizados."})]}),e.jsxs("div",{className:"privacy-note",children:[e.jsx("span",{"aria-hidden":"true",children:"PRIVADO"}),e.jsx("p",{children:"RRHH revisa el paquete; Administración realiza la aprobación financiera final."})]}),e.jsxs("div",{className:"field-grid",children:[e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["Moneda ",e.jsx("b",{children:"*"})]}),e.jsxs("select",{value:a.currency,onChange:s=>l("currency",s.target.value),children:[e.jsx("option",{children:"USD"}),e.jsx("option",{children:"DOP"}),e.jsx("option",{children:"GTQ"}),e.jsx("option",{children:"COP"}),e.jsx("option",{children:"PAB"}),e.jsx("option",{children:"MXN"})]})]}),e.jsxs("label",{className:"field",children:[e.jsxs("span",{children:["Presupuesto mensual total ",e.jsx("b",{children:"*"})]}),e.jsx("input",{type:"number",min:"0",value:a.budget,onChange:s=>l("budget",s.target.value),placeholder:"0",className:i.budget?"is-invalid":""}),i.budget?e.jsx("small",{className:"field-error",children:i.budget}):e.jsxs("small",{children:["Para ",a.quantity," ",a.quantity===1?"vacante":"vacantes","."]})]}),e.jsxs("label",{className:"field field--wide",children:[e.jsxs("span",{children:["Paquete salarial ",e.jsx("b",{children:"*"})]}),e.jsx("textarea",{rows:5,value:a.salaryPackage,onChange:s=>l("salaryPackage",s.target.value),placeholder:"Salario base, variable, viáticos, beneficios y cualquier condición relevante…",className:i.salaryPackage?"is-invalid":""}),i.salaryPackage?e.jsx("small",{className:"field-error",children:i.salaryPackage}):null]})]})]}):null,r===4?e.jsxs("section",{className:"form-section review-step","aria-labelledby":"step-4-title",children:[e.jsxs("header",{children:[e.jsx("p",{children:"PASO 04"}),e.jsx("h2",{id:"step-4-title",children:"Revisa antes de enviar"}),e.jsx("span",{children:"Al enviar, el reloj del SLA inicia y la solicitud pasa a RRHH."})]}),e.jsxs("div",{className:"review-hero",children:[e.jsxs("div",{children:[e.jsx("p",{children:"SOLICITUD"}),e.jsx("h3",{children:a.position}),e.jsxs("span",{children:[a.city,", ",a.country," · ",a.client]})]}),e.jsxs("strong",{children:[a.quantity,e.jsx("small",{children:a.quantity===1?"vacante":"vacantes"})]})]}),e.jsxs("div",{className:"review-grid",children:[e.jsxs("section",{children:[e.jsx("h4",{children:"Vacante"}),e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:"Tipo"}),e.jsx("dd",{children:a.vacancyType})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Duración"}),e.jsx("dd",{children:a.duration})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Inicio"}),e.jsx("dd",{children:a.startDate})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Tier estimado"}),e.jsxs("dd",{children:["Tier ",o]})]})]}),e.jsx("button",{type:"button",onClick:()=>t(1),children:"Editar"})]}),e.jsxs("section",{children:[e.jsx("h4",{children:"Contexto"}),e.jsx("p",{children:a.justification}),a.comments?e.jsx("small",{children:a.comments}):null,e.jsx("button",{type:"button",onClick:()=>t(2),children:"Editar"})]}),e.jsxs("section",{children:[e.jsx("h4",{children:"Compensación"}),e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:"Presupuesto"}),e.jsxs("dd",{children:[a.currency," ",Number(a.budget).toLocaleString("es-419")]})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"Paquete"}),e.jsx("dd",{children:a.salaryPackage})]})]}),e.jsx("button",{type:"button",onClick:()=>t(3),children:"Editar"})]})]}),e.jsxs("div",{className:"sla-preview",children:[e.jsx("span",{className:u?"sla-preview__date":"sla-preview__days",children:u?"CUMPLE / NO CUMPLE":`${b} DÍAS HÁBILES`}),e.jsxs("div",{children:[e.jsx("h4",{children:"SLA estimado"}),e.jsx("p",{children:u?"La fecha de inicio es futura; se medirá el cumplimiento de la incorporación, no días transcurridos.":`${m} días base + ${Math.max(0,a.quantity-1)*2} días por volumen.`})]})]}),e.jsxs("div",{className:"id-preview",children:[e.jsx("p",{children:"Esta solicitud generará:"}),Array.from({length:Math.min(a.quantity,5)},(s,n)=>e.jsxs("span",{children:["REQ-…-",String(n+1).padStart(2,"0")]},n)),a.quantity>5?e.jsxs("span",{children:["+ ",a.quantity-5," IDs"]}):null]})]}):null,e.jsxs("footer",{className:"form-actions",children:[e.jsx("button",{className:"button button--quiet",type:"button",onClick:q,children:"Guardar borrador"}),e.jsxs("div",{children:[r>1?e.jsx("button",{className:"button button--quiet",type:"button",onClick:g,children:"Anterior"}):null,r<4?e.jsx("button",{className:"button button--primary",type:"button",onClick:N,children:"Continuar"}):e.jsx("button",{className:"button button--primary",type:"button",onClick:D,children:"Enviar a RRHH"})]})]})]}),e.jsxs("aside",{className:"form-aside",children:[e.jsxs("section",{children:[e.jsx("p",{className:"eyebrow",children:"Solicitante"}),e.jsxs("div",{className:"requester",children:[e.jsx("span",{className:"avatar",children:"LM"}),e.jsxs("div",{children:[e.jsx("b",{children:"Laura Medina"}),e.jsx("small",{children:"laura.medina@gomezleemarketing.com"})]})]}),e.jsx("p",{children:"El país y los permisos se validarán con el perfil de Google al integrar el backend."})]}),e.jsxs("section",{className:"form-aside__route",children:[e.jsx("p",{className:"eyebrow",children:"Ruta de aprobación"}),e.jsxs("ol",{children:[e.jsxs("li",{className:"is-current",children:[e.jsx("span",{children:"01"}),e.jsx("b",{children:"RRHH"}),e.jsx("small",{children:"Validación inicial"})]}),e.jsxs("li",{children:[e.jsx("span",{children:"02"}),e.jsx("b",{children:"Administración"}),e.jsx("small",{children:"Presupuesto final"})]}),e.jsxs("li",{children:[e.jsx("span",{children:"03"}),e.jsx("b",{children:"Dirección RRHH"}),e.jsx("small",{children:"Activa reclutamiento"})]})]})]}),e.jsxs("section",{className:"form-tip",children:[e.jsx("span",{children:"BUENA PRÁCTICA"}),e.jsx("p",{children:"Si dos personas tienen distinta ciudad o salario, crea requisiciones separadas. Si comparten ambos, usa la cantidad."})]})]})]})]})}export{O as default};