1 line
No EOL
30 KiB
JavaScript
1 line
No EOL
30 KiB
JavaScript
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,63209,e=>{"use strict";let t=(0,e.i(75254).default)("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["AlertCircle",0,t],63209)},95468,e=>{"use strict";let t=(0,e.i(75254).default)("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["CheckCircle2",0,t],95468)},92950,e=>{"use strict";var t=e.i(43476),r=e.i(63209),a=e.i(95468),n=e.i(75254);let s=(0,n.default)("CircleDashed",[["path",{d:"M10.1 2.182a10 10 0 0 1 3.8 0",key:"5ilxe3"}],["path",{d:"M13.9 21.818a10 10 0 0 1-3.8 0",key:"11zvb9"}],["path",{d:"M17.609 3.721a10 10 0 0 1 2.69 2.7",key:"1iw5b2"}],["path",{d:"M2.182 13.9a10 10 0 0 1 0-3.8",key:"c0bmvh"}],["path",{d:"M20.279 17.609a10 10 0 0 1-2.7 2.69",key:"1ruxm7"}],["path",{d:"M21.818 10.1a10 10 0 0 1 0 3.8",key:"qkgqxc"}],["path",{d:"M3.721 6.391a10 10 0 0 1 2.7-2.69",key:"1mcia2"}],["path",{d:"M6.391 20.279a10 10 0 0 1-2.69-2.7",key:"1fvljs"}]]),i=(0,n.default)("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]),l={OFFEN:{value:"OFFEN",label:"Noch nicht bewertet",badgeClass:"border-slate-300 bg-slate-100 text-slate-700",previewClass:"border-slate-300 bg-slate-50 text-slate-700",color:"#2E3B40",icon:s},BESTANDEN:{value:"BESTANDEN",label:"Bestanden",badgeClass:"border-success/35 bg-success/15 text-success",previewClass:"border-success/40 bg-success/10 text-success",color:"#245C36",icon:a.CheckCircle2},BESTANDEN_MIT_AUFLAGEN:{value:"BESTANDEN_MIT_AUFLAGEN",label:"Bestanden mit Auflagen",badgeClass:"border-warning/40 bg-warning/15 text-[#7A5A00]",previewClass:"border-warning/45 bg-warning/10 text-[#7A5A00]",color:"#7A5A00",icon:i},NICHT_BESTANDEN:{value:"NICHT_BESTANDEN",label:"Nicht bestanden",badgeClass:"border-danger/35 bg-danger/15 text-danger",previewClass:"border-danger/40 bg-danger/10 text-danger",color:"#7A1F26",icon:r.AlertCircle}},d={"":"OFFEN",offen:"OFFEN",OFFEN:"OFFEN",bestanden:"BESTANDEN",BESTANDEN:"BESTANDEN",mit_auflagen:"BESTANDEN_MIT_AUFLAGEN",bestanden_mit_auflagen:"BESTANDEN_MIT_AUFLAGEN","bestanden mit auflagen":"BESTANDEN_MIT_AUFLAGEN",BESTANDEN_MIT_AUFLAGEN:"BESTANDEN_MIT_AUFLAGEN",nicht_bestanden:"NICHT_BESTANDEN","nicht bestanden":"NICHT_BESTANDEN",NICHT_BESTANDEN:"NICHT_BESTANDEN"};function o(e){return d[String(e??"").trim()]??"OFFEN"}function c(e){return l[o(e)]}e.s(["ValidationResultBadge",0,function({value:e,className:r=""}){let a=c(e),n=a.icon;return(0,t.jsxs)("span",{className:`inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-semibold ${a.badgeClass} ${r}`,children:[(0,t.jsx)(n,{className:"h-3.5 w-3.5"}),a.label]})},"getValidationResultPresentation",0,c,"normalizeValidationResult",0,o,"validationResultValues",0,["OFFEN","BESTANDEN","BESTANDEN_MIT_AUFLAGEN","NICHT_BESTANDEN"]],92950)},7233,e=>{"use strict";let t=(0,e.i(75254).default)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",0,t],7233)},57344,e=>{"use strict";var t=e.i(43476),r=e.i(94814),a=e.i(54616),n=e.i(66027),s=e.i(12598),i=e.i(75254);let l=(0,i.default)("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);var d=e.i(40160);let o=(0,i.default)("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);var c=e.i(7233);let u=(0,i.default)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]),m=(0,i.default)("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),h=(0,i.default)("CloudUpload",[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"m8 17 4-4 4 4",key:"1quai1"}]]);var g=e.i(37727),p=e.i(71645),x=e.i(53145),b=e.i(50270);let f=(0,i.default)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);function _({children:e,icon:r,state:a="normal",loadingText:n,successText:s="Gespeichert",disabled:i,disabledReason:l,variant:d="secondary",className:o="",...c}){let u=i||"loading"===a,m="success"===a?"btn-success":"error"===a?"btn-danger":`btn-${d}`;return(0,t.jsxs)("button",{...c,disabled:u,title:u?l:c.title,className:`btn ${m} ${o}`,children:["loading"===a?(0,t.jsx)("span",{className:"spinner"}):"success"===a?(0,t.jsx)(f,{className:"h-4 w-4"}):r,(0,t.jsx)("span",{children:"loading"===a?n??"Laedt...":"success"===a?s:e})]})}var j=e.i(28779),N=e.i(54858),v=e.i(92950);let y=["yes","no","na"],w=new Date().toISOString().slice(0,10),k=["Aufbereitungsraum","reiner Bereich","unreiner Bereich","Sterilisator","Beladung","Sensorposition","Chargenprotokoll","Indikator","Zertifikat","Kalibrierschein","Winlog-Auswertung"],E={report_number:{label:"Berichtsnummer",section:"Allgemeine Angaben"},validation_type:{label:"Validierungsart",section:"Allgemeine Angaben"},performed_on:{label:"Pruefdatum",section:"Allgemeine Angaben"},customer_id:{label:"Kunde",section:"Kunde und Standort"},location_id:{label:"Standort",section:"Kunde und Standort"},device_id:{label:"Geraet",section:"Geraet"},examiner_name:{label:"Pruefer",section:"Allgemeine Angaben"}},A=b.z.object({report_number:b.z.string().min(3),validation_type:b.z.string().min(1),project:b.z.string().optional(),performed_on:b.z.string().min(1),next_validation_on:b.z.string().optional().nullable(),revalidation_interval_months:b.z.coerce.number().int().min(1),next_validation_manually_overridden:b.z.boolean(),test_location:b.z.string().optional(),examiner_name:b.z.string().min(1),participants:b.z.string().optional(),status:b.z.string().min(1),result:b.z.string().min(1),customer_id:b.z.string().min(1),location_id:b.z.string().min(1),contact_id:b.z.string().optional().nullable(),examiner_id:b.z.string().optional().nullable(),operator_name:b.z.string().optional(),device_id:b.z.string().min(1),equipment_ids:b.z.array(b.z.string()),environment_conditions:b.z.record(b.z.unknown()),documentation_checklist:b.z.array(b.z.record(b.z.unknown())),performance_checklist:b.z.array(b.z.record(b.z.unknown())),programs:b.z.array(b.z.record(b.z.unknown())),loading_patterns:b.z.array(b.z.record(b.z.unknown())),measurement_data:b.z.array(b.z.record(b.z.unknown())),drying:b.z.record(b.z.unknown()),recommendations:b.z.array(b.z.record(b.z.unknown())),attachments:b.z.array(b.z.record(b.z.unknown()))});function z(e=""){return{report_number:e,validation_type:"Erstvalidierung",project:"",performed_on:w,next_validation_on:"",revalidation_interval_months:24,next_validation_manually_overridden:!1,test_location:"",examiner_name:"",participants:"",status:"ENTWURF",result:"OFFEN",customer_id:"",location_id:"",contact_id:"",examiner_id:"",operator_name:"",device_id:"",equipment_ids:[],environment_conditions:{room_temperature:"",humidity:"",test_time:"",checks:[{text:"Raumbedingungen stabil",value:"na",comment:""},{text:"Aufstellort frei zugaenglich",value:"na",comment:""},{text:"Medienversorgung verfuegbar",value:"na",comment:""}]},documentation_checklist:[],performance_checklist:[],programs:[{name:"Vakuumtest",selected:!1,custom:!1},{name:"Bowie-Dick / Leerkammerprofil",selected:!1,custom:!1},{name:"134 C hohl verpackt",selected:!1,custom:!1}],loading_patterns:[1,2,3].map(e=>({run:e,pattern:"",description:"",images:[]})),measurement_data:["Vakuumtest","Leerkammerprofil","Testlauf 1","Testlauf 2","Testlauf 3"].map(e=>({name:e,start_time:"",end_time:"",duration:"",leak_rate:"",min_temperature:"",max_temperature:"",temperature_band:"",equilibration_time:"",holding_time:"",pressure:"",result:"",imports:[]})),drying:{start_weight:"",end_weight:"",difference:"",rating:"",comment:""},recommendations:[],attachments:[]}}function S({title:e,children:r,defaultOpen:a=!1}){let[n,s]=(0,p.useState)(a);return(0,t.jsxs)("section",{className:"rounded-lg border border-border bg-surface shadow-soft",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>s(e=>!e),className:"flex w-full items-center justify-between px-5 py-4 text-left text-lg font-semibold hover:bg-background",children:[e,(0,t.jsx)(l,{className:`h-5 w-5 transition ${n?"rotate-180":""}`})]}),n&&(0,t.jsx)("div",{className:"border-t border-border p-5",children:r})]})}function T({label:e,children:r}){return(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-text",children:e}),(0,t.jsx)("div",{className:"mt-2",children:r})]})}let B="h-12 w-full rounded-lg border border-border bg-white px-4 outline-none focus:border-primary",F="min-h-24 w-full rounded-lg border border-border bg-white px-4 py-3 outline-none focus:border-primary";function $({validationId:e}){let{token:i}=(0,j.useAuth)(),l=(0,s.useQueryClient)(),[b,f]=(0,p.useState)(e??null),[y,q]=(0,p.useState)(""),[R,G]=(0,p.useState)(""),[I,U]=(0,p.useState)(null),[O,K]=(0,p.useState)("normal"),[L,H]=(0,p.useState)("normal"),[Q,W]=(0,p.useState)("normal"),[Z,J]=(0,p.useState)(null),X=(0,p.useRef)(null),Y=(0,n.useQuery)({queryKey:["next-report-number",i],queryFn:()=>(0,N.apiGet)("/validations/next-report-number",i??""),enabled:!!i}),ee=(0,n.useQuery)({queryKey:["customers-options",i],queryFn:()=>(0,N.apiGet)("/customers?page=1&page_size=100",i??""),enabled:!!i}),et=(0,n.useQuery)({queryKey:["locations-options",i],queryFn:()=>(0,N.apiGet)("/locations?page=1&page_size=100",i??""),enabled:!!i}),er=(0,n.useQuery)({queryKey:["contacts-options",i],queryFn:()=>(0,N.apiGet)("/contacts?page=1&page_size=100",i??""),enabled:!!i}),ea=(0,n.useQuery)({queryKey:["devices-options",i],queryFn:()=>(0,N.apiGet)("/devices?page=1&page_size=100",i??""),enabled:!!i}),en=(0,n.useQuery)({queryKey:["equipment-options",i],queryFn:()=>(0,N.apiGet)("/equipment?page=1&page_size=100",i??""),enabled:!!i}),es=(0,n.useQuery)({queryKey:["report-checklists",i],queryFn:()=>(0,N.apiGet)("/report-templates/default/checklists",i??""),enabled:!!i}),ei=(0,n.useQuery)({queryKey:["validation",e,i],queryFn:()=>(0,N.apiGet)(`/validations/${e}`,i??""),enabled:!!(i&&e)}),el=(0,x.useForm)({resolver:(0,r.zodResolver)(A),defaultValues:z()}),ed=(0,x.useWatch)({control:el.control}),eo=ea.data?.items.find(e=>e.id===el.watch("device_id")),ec=en.data?.items.filter(e=>el.watch("equipment_ids").includes(e.id))??[],eu=(0,v.getValidationResultPresentation)(el.watch("result")),em=(0,x.useFieldArray)({control:el.control,name:"recommendations"}),eh=(0,x.useFieldArray)({control:el.control,name:"attachments"});(0,p.useEffect)(()=>{Y.data?.report_number&&!el.getValues("report_number")&&el.setValue("report_number",Y.data.report_number)},[el,Y.data]),(0,p.useEffect)(()=>{if(!ei.data)return;let e=ei.data;el.reset({...z(),...e,result:(0,v.normalizeValidationResult)(e.result),project:e.project??"",test_location:e.test_location??"",examiner_name:e.examiner_name??"",participants:e.participants??"",operator_name:e.operator_name??"",performed_on:e.performed_on??"",next_validation_on:e.next_validation_on??"",contact_id:e.contact_id??"",examiner_id:"",location_id:e.location_id??"",device_id:e.device_id??""}),f(e.id)},[ei.data,el]),(0,p.useEffect)(()=>{if(!es.data||ei.data||el.getValues("documentation_checklist").length>0)return;let e=es.data.flatMap(e=>e.items.map(t=>({...t,template_key:e.checklist_key,template_title:e.title})));el.setValue("documentation_checklist",e)},[es.data,ei.data,el]);let eg=ei.data?.status==="FREIGEGEBEN"||ei.data?.status==="ABGESCHLOSSEN",ep=(0,a.useMutation)({mutationFn:e=>(0,N.apiSend)(b?`/validations/${b}`:"/validations",i??"",b?"PUT":"POST",(0,N.normalizeValidationPayload)(e)),onSuccess:e=>{f(e.id),q(new Date().toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"})),G(""),K("success"),window.setTimeout(()=>K("normal"),1500),l.invalidateQueries({queryKey:["dashboard"]})},onError:e=>{K("error"),G(e instanceof Error?e.message:"Speichern fehlgeschlagen.")}});(0,p.useEffect)(()=>{if(!eg&&i&&ed.report_number&&ed.validation_type&&ed.customer_id&&ed.location_id&&ed.device_id&&ed.examiner_name&&ed.performed_on)return X.current&&clearTimeout(X.current),X.current=setTimeout(()=>{let e=el.getValues();ep.mutate(e)},2500),()=>{X.current&&clearTimeout(X.current)}},[el,ep,i,ed]);let ex=ee.data?.items??[],eb=ex.find(e=>e.id===el.watch("customer_id")),ef=(et.data?.items??[]).filter(e=>!el.watch("customer_id")||e.customer_id===el.watch("customer_id")),e_=(er.data?.items??[]).filter(e=>!el.watch("customer_id")||e.customer_id===el.watch("customer_id")),ej=(ea.data?.items??[]).filter(e=>!el.watch("customer_id")||e.customer_id===el.watch("customer_id")),eN=(0,p.useMemo)(()=>ec.filter(e=>e.calibration_due_on&&e.calibration_due_on<w),[ec]);function ev(e=el.getValues()){return Object.entries(E).filter(([t])=>!e[t])}function ey(){let e=ev()[0];return!!e&&(G(`${e[1].label} fehlt in ${e[1].section}.`),document.querySelector(`[name="${e[0]}"]`)?.scrollIntoView({behavior:"smooth",block:"center"}),!0)}async function ew(){if(eg)return void G("Diese Validierung ist schreibgeschuetzt.");if(ev().length){H("error"),ey();return}try{H("loading");let e=b?null:await ep.mutateAsync(el.getValues()),t=b??e?.id;if(!t||!i)return;let r=await fetch(`${N.API_BASE}/validations/${t}/review`,{method:"POST",headers:{Authorization:`Bearer ${i}`}}),a=await r.json();U(a),H("success"),window.setTimeout(()=>H("normal"),1500),G(a.errors.length?"Pruefung abgeschlossen: Fehler blockieren die Freigabe.":"Pruefung abgeschlossen: keine blockierenden Fehler.")}catch(e){H("error"),G(e instanceof Error?e.message:"Pruefung fehlgeschlagen.")}}async function ek(e,t){if(e&&0!==e.length){if(!b||!i)return void G("Bitte den Entwurf speichern, bevor Bilder oder Anlagen hochgeladen werden.");try{for(let[r,a]of(J(t),Array.from(e).entries())){let e=eh.fields.length+r+1,n=new FormData;n.append("category",t),n.append("description",""),n.append("order",String(e)),n.append("file",a);let s=await fetch(`${N.API_BASE}/validations/${b}/attachments`,{method:"POST",headers:{Authorization:`Bearer ${i}`},body:n});if(!s.ok){let e=await s.json().catch(()=>null);throw Error(e?.detail??"Upload fehlgeschlagen.")}let l=await s.json();eh.append(l)}l.invalidateQueries({queryKey:["validation",b,i]}),G("Upload abgeschlossen.")}catch(e){G(e instanceof Error?e.message:"Upload fehlgeschlagen.")}finally{J(null)}}}async function eE(){if(b&&i)try{W("loading");let e=await fetch(`${N.API_BASE}/validations/${b}/report.pdf`,{headers:{Authorization:`Bearer ${i}`}});if(!e.ok){let t=await e.json().catch(()=>null);throw Error(t?.detail??"PDF konnte nicht erzeugt werden.")}let t=await e.blob(),r=URL.createObjectURL(t),a=document.createElement("a");a.href=r,a.download=`${el.getValues("report_number")}.pdf`,a.click(),URL.revokeObjectURL(r),W("success"),window.setTimeout(()=>W("normal"),1500)}catch(e){W("error"),G(e instanceof Error?e.message:"PDF-Download fehlgeschlagen.")}}return(0,t.jsxs)("form",{onSubmit:el.handleSubmit(function(e){if(eg)return void G("Diese Validierung ist schreibgeschuetzt.");if(ev(e).length){K("error"),ey();return}K("loading"),ep.mutate(e)}),className:"space-y-5 pb-28",children:[(0,t.jsxs)("header",{children:[(0,t.jsx)("h1",{className:"text-3xl font-semibold text-text",children:"Validierungsbericht"}),(0,t.jsx)("p",{className:"mt-2 text-text-light",children:eg?"Schreibgeschuetzte freigegebene oder abgeschlossene Validierung.":"Eine responsive Seite fuer Erfassung, Pruefung und Berichtserstellung."})]}),(0,t.jsx)(S,{title:"1. Allgemeine Angaben",defaultOpen:!0,children:(0,t.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,t.jsx)(T,{label:"Berichtsnummer *",children:(0,t.jsx)("input",{className:B,...el.register("report_number")})}),(0,t.jsx)(T,{label:"Validierungsart *",children:(0,t.jsxs)("select",{className:B,...el.register("validation_type"),children:[(0,t.jsx)("option",{children:"Erstvalidierung"}),(0,t.jsx)("option",{children:"Revalidierung"}),(0,t.jsx)("option",{children:"Leistungsbeurteilung"}),(0,t.jsx)("option",{children:"Sonderpruefung"})]})}),(0,t.jsx)(T,{label:"Projekt",children:(0,t.jsx)("input",{className:B,...el.register("project")})}),(0,t.jsx)(T,{label:"Pruefdatum *",children:(0,t.jsx)("input",{type:"date",className:B,...el.register("performed_on")})}),(0,t.jsx)(T,{label:"Revalidierungsintervall Monate",children:(0,t.jsx)("input",{type:"number",className:B,...el.register("revalidation_interval_months")})}),(0,t.jsx)(T,{label:"Naechste Validierung",children:(0,t.jsx)("input",{type:"date",className:B,...el.register("next_validation_on"),onChange:e=>{el.setValue("next_validation_manually_overridden",!0),el.setValue("next_validation_on",e.target.value)}})}),(0,t.jsx)(T,{label:"Pruefungsort",children:(0,t.jsx)("input",{className:B,...el.register("test_location")})}),(0,t.jsx)(T,{label:"Pruefer *",children:(0,t.jsx)("input",{className:B,...el.register("examiner_name")})}),(0,t.jsx)(T,{label:"Mitwirkende Personen",children:(0,t.jsx)("textarea",{className:F,...el.register("participants")})}),(0,t.jsx)(T,{label:"Status",children:(0,t.jsxs)("select",{className:B,...el.register("status"),children:[(0,t.jsx)("option",{value:"ENTWURF",children:"Entwurf"}),(0,t.jsx)("option",{value:"BEREIT_ZUR_PRUEFUNG",children:"Bereit zur Pruefung"}),(0,t.jsx)("option",{value:"IN_PRUEFUNG",children:"In Pruefung"}),(0,t.jsx)("option",{value:"FREIGEGEBEN",children:"Freigegeben"}),(0,t.jsx)("option",{value:"ABGESCHLOSSEN",children:"Abgeschlossen"}),(0,t.jsx)("option",{value:"STORNIERT",children:"Storniert"})]})}),(0,t.jsxs)(T,{label:"Gesamtergebnis",children:[(0,t.jsx)("select",{className:B,...el.register("result"),children:v.validationResultValues.map(e=>(0,t.jsx)("option",{value:e,children:(0,v.getValidationResultPresentation)(e).label},e))}),(0,t.jsx)("div",{className:`mt-3 flex min-h-12 items-center justify-center rounded-lg border px-4 text-sm font-semibold ${eu.previewClass}`,children:eu.label})]})]})}),(0,t.jsx)(S,{title:"2. Kunde und Standort",children:(0,t.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,t.jsx)(T,{label:"Kunde *",children:(0,t.jsxs)("select",{className:B,...el.register("customer_id"),children:[(0,t.jsx)("option",{value:"",children:"Bitte waehlen"}),ex.map(e=>(0,t.jsx)("option",{value:e.id,children:e.name},e.id))]})}),(0,t.jsx)(T,{label:"Standort *",children:(0,t.jsxs)("select",{className:B,...el.register("location_id"),children:[(0,t.jsx)("option",{value:"",children:"Bitte waehlen"}),ef.map(e=>(0,t.jsx)("option",{value:e.id,children:e.name},e.id))]})}),(0,t.jsx)(T,{label:"Ansprechpartner",children:(0,t.jsxs)("select",{className:B,...el.register("contact_id"),children:[(0,t.jsx)("option",{value:"",children:"Bitte waehlen"}),e_.map(e=>(0,t.jsx)("option",{value:e.id,children:e.full_name},e.id))]})}),(0,t.jsx)(T,{label:"Betreiber",children:(0,t.jsx)("input",{className:B,...el.register("operator_name")})}),(0,t.jsx)(T,{label:"QM-/Hygienebeauftragter",children:(0,t.jsx)("input",{className:B,value:[eb?.quality_manager,eb?.hygiene_officer].filter(Boolean).join(" / "),readOnly:!0})})]})}),(0,t.jsxs)(S,{title:"3. Geraet",children:[(0,t.jsx)(T,{label:"Geraet *",children:(0,t.jsxs)("select",{className:B,...el.register("device_id"),children:[(0,t.jsx)("option",{value:"",children:"Bitte waehlen"}),ej.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.manufacturer," ",e.model," - ",e.serial_number]},e.id))]})}),(0,t.jsx)("div",{className:"mt-4 grid gap-4 md:grid-cols-3",children:[["Hersteller",eo?.manufacturer],["Modell",eo?.model],["Seriennummer",eo?.serial_number],["Baujahr",eo?.year_built],["Inbetriebnahme",eo?.commissioned_on],["Kammervolumen",eo?.chamber_volume_liters],["Dampferzeugung",eo?.steam_generation],["Wasseraufbereitung",eo?.water_treatment],["Dokumentation",eo?.documentation],["Lieferant",eo?.supplier]].map(([e,r])=>(0,t.jsxs)("div",{className:"rounded-lg border border-border bg-background p-4",children:[(0,t.jsx)("p",{className:"text-xs text-text-light",children:e}),(0,t.jsx)("p",{className:"mt-1 font-medium",children:String(r??"-")})]},e))})]}),(0,t.jsxs)(S,{title:"4. Pruefmittel",children:[(0,t.jsx)(x.Controller,{control:el.control,name:"equipment_ids",render:({field:e})=>(0,t.jsx)("div",{className:"grid gap-3 md:grid-cols-2",children:(en.data?.items??[]).map(r=>{let a=!!(r.calibration_due_on&&r.calibration_due_on<w);return(0,t.jsxs)("label",{className:"flex items-start gap-3 rounded-lg border border-border p-4",children:[(0,t.jsx)("input",{type:"checkbox",className:"mt-1 h-5 w-5",checked:e.value.includes(r.id),onChange:t=>e.onChange(t.target.checked?[...e.value,r.id]:e.value.filter(e=>e!==r.id))}),(0,t.jsxs)("span",{children:[(0,t.jsx)("strong",{children:r.kind}),(0,t.jsx)("br",{}),r.serial_number," · ",r.calibrated_on??"-"," · ",r.status,a&&(0,t.jsx)("span",{className:"ml-2 text-danger",children:"Kalibrierung abgelaufen"})]})]},r.id)})})}),eN.length>0&&(0,t.jsx)("p",{className:"mt-4 rounded-lg border border-danger/30 bg-danger/5 p-4 text-danger",children:"Mindestens ein ausgewaehltes Pruefmittel hat eine abgelaufene Kalibrierung."})]}),(0,t.jsxs)(S,{title:"5. Umgebungsbedingungen",children:[(0,t.jsxs)("div",{className:"grid gap-4 md:grid-cols-3",children:[(0,t.jsx)(T,{label:"Raumtemperatur",children:(0,t.jsx)("input",{className:B,...el.register("environment_conditions.room_temperature")})}),(0,t.jsx)(T,{label:"relative Luftfeuchtigkeit",children:(0,t.jsx)("input",{className:B,...el.register("environment_conditions.humidity")})}),(0,t.jsx)(T,{label:"Pruefzeit",children:(0,t.jsx)("input",{className:B,...el.register("environment_conditions.test_time")})})]}),[0,1,2].map(e=>(0,t.jsx)(C,{form:el,path:`environment_conditions.checks.${e}`},e))]}),(0,t.jsxs)(S,{title:"6. Dokumentations- und Leistungschecklisten",children:[el.watch("documentation_checklist").map((e,r)=>(0,t.jsx)(C,{form:el,path:`documentation_checklist.${r}`},`${String(e.template_key??"check")}-${r}`)),el.watch("performance_checklist").map((e,r)=>(0,t.jsx)(C,{form:el,path:`performance_checklist.${r}`},`performance-${r}`))]}),(0,t.jsxs)(S,{title:"7. Programme",children:[[0,1,2].map(e=>(0,t.jsx)(M,{form:el,index:e},e)),(0,t.jsx)(_,{type:"button",icon:(0,t.jsx)(c.Plus,{className:"h-4 w-4"}),onClick:()=>el.setValue("programs",[...el.getValues("programs"),{name:"",selected:!0,custom:!0}]),className:"mt-4",children:"Eigenes Programm"})]}),(0,t.jsx)(S,{title:"8. Beladungsmuster",children:[0,1,2].map(e=>(0,t.jsx)(V,{form:el,index:e},e))}),(0,t.jsx)(S,{title:"9. Messdaten",children:[0,1,2,3,4].map(e=>(0,t.jsx)(D,{form:el,index:e},e))}),(0,t.jsx)(S,{title:"10. Trocknung",children:(0,t.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[["start_weight","end_weight","difference","rating"].map(e=>(0,t.jsx)(T,{label:e,children:(0,t.jsx)("input",{className:B,...el.register(`drying.${e}`)})},e)),(0,t.jsx)(T,{label:"Bemerkung",children:(0,t.jsx)("textarea",{className:F,...el.register("drying.comment")})})]})}),(0,t.jsxs)(S,{title:"11. Empfehlungen und Auflagen",children:[em.fields.map((e,r)=>(0,t.jsxs)("div",{className:"mb-3 grid gap-3 rounded-lg border border-border p-4 md:grid-cols-4",children:[(0,t.jsx)("input",{className:B,placeholder:"Nummer",...el.register(`recommendations.${r}.number`)}),(0,t.jsx)("input",{className:B,placeholder:"Text",...el.register(`recommendations.${r}.text`)}),(0,t.jsx)("input",{type:"date",className:B,...el.register(`recommendations.${r}.deadline`)}),(0,t.jsx)("input",{className:B,placeholder:"Status",...el.register(`recommendations.${r}.status`)})]},e.id)),(0,t.jsx)(_,{type:"button",icon:(0,t.jsx)(c.Plus,{className:"h-4 w-4"}),onClick:()=>em.append({number:em.fields.length+1,text:"",deadline:"",status:"offen"}),children:"Zeile hinzufuegen"})]}),(0,t.jsxs)(S,{title:"12. Bilder und Anlagen",children:[(0,t.jsx)("div",{className:"grid gap-3 md:grid-cols-2",children:k.map(e=>(0,t.jsxs)("label",{className:"rounded-lg border border-dashed border-primary/40 p-4 transition hover:border-primary hover:bg-background",children:[(0,t.jsx)(h,{className:"mb-2 h-5 w-5 text-primary"}),e,Z===e&&(0,t.jsx)("span",{className:"ml-2 text-sm text-text-light",children:"Upload..."}),(0,t.jsx)("input",{type:"file",multiple:!0,className:"mt-3 block w-full text-sm",onChange:t=>ek(t.target.files,e)})]},e))}),(0,t.jsx)("div",{className:"mt-5 grid gap-3 md:grid-cols-2",children:eh.fields.map((e,r)=>{let a=String(el.watch(`attachments.${r}.url`)??""),n=a&&/\.(png|jpe?g|webp|svg)$/i.test(a)?`${N.API_BASE.replace("/api/v1","")}${a}`:"";return(0,t.jsxs)("div",{className:"rounded-lg border border-border p-4",children:[n&&(0,t.jsx)("img",{src:n,alt:String(el.watch(`attachments.${r}.filename`)??""),className:"mb-3 max-h-56 w-full rounded-lg border border-border object-contain"}),(0,t.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,t.jsx)("strong",{children:String(el.watch(`attachments.${r}.filename`)??"")}),(0,t.jsx)("button",{type:"button",onClick:()=>eh.remove(r),children:(0,t.jsx)(g.X,{className:"h-4 w-4 text-danger"})})]}),(0,t.jsx)("input",{className:`${B} mt-3`,placeholder:"Beschreibung",...el.register(`attachments.${r}.description`)}),(0,t.jsx)("input",{className:`${B} mt-3`,placeholder:"Reihenfolge",...el.register(`attachments.${r}.order`)})]},e.id)})})]}),I&&(0,t.jsxs)("section",{className:"rounded-lg border border-border bg-surface p-5 shadow-soft",children:[(0,t.jsx)("h2",{className:"text-xl font-semibold",children:"Pruefergebnis"}),(0,t.jsxs)("div",{className:"mt-4 grid gap-4 md:grid-cols-3",children:[(0,t.jsx)(P,{title:"Fehler",items:I.errors,tone:"danger"}),(0,t.jsx)(P,{title:"Warnungen",items:I.warnings,tone:"warning"}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"font-semibold text-success",children:"Vollstaendige Bereiche"}),I.complete_sections.map(e=>(0,t.jsx)("p",{className:"mt-2 text-sm",children:e},e))]})]})]}),ep.isError&&R&&(0,t.jsx)("div",{className:"fixed right-4 top-4 z-50 max-w-md rounded-lg border border-danger/30 bg-white p-4 text-sm text-danger shadow-soft",children:R}),(0,t.jsx)("fieldset",{disabled:eg,className:eg?"pointer-events-none contents opacity-80":"contents"}),(0,t.jsx)("div",{className:"fixed inset-x-0 bottom-0 z-40 border-t border-border bg-surface/95 px-4 py-3 shadow-soft backdrop-blur",children:(0,t.jsxs)("div",{className:"mx-auto flex max-w-7xl flex-wrap items-center justify-between gap-3",children:[(0,t.jsxs)("div",{className:"text-sm text-text-light",children:[(0,t.jsx)("p",{children:y?`Automatisch gespeichert um ${y}`:"Autosave startet nach Ausfuellen der Pflichtfelder."}),ev().length>0&&(0,t.jsxs)("p",{className:"text-danger",children:["Fehlt: ",ev().map(([,e])=>e.label).join(", ")]}),R&&(0,t.jsx)("p",{className:"text-primary-dark",children:R})]}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(_,{type:"submit",disabled:eg,disabledReason:"Freigegebene und abgeschlossene Validierungen sind schreibgeschuetzt",icon:(0,t.jsx)(u,{className:"h-4 w-4"}),state:O,loadingText:"Speichern...",successText:"Gespeichert",children:"Entwurf speichern"}),(0,t.jsx)(_,{type:"button",disabled:eg,disabledReason:"Freigegebene und abgeschlossene Validierungen sind schreibgeschuetzt",icon:(0,t.jsx)(m,{className:"h-4 w-4"}),state:L,loadingText:"Pruefung laeuft...",successText:"Geprueft",onClick:ew,children:"Bericht pruefen"}),(0,t.jsx)(_,{type:"button",variant:"primary",icon:(0,t.jsx)(o,{className:"h-4 w-4"}),onClick:()=>b?window.location.assign(`/validations/${b}/preview`):ey(),children:"HTML-Vorschau"}),(0,t.jsx)(_,{type:"button",icon:(0,t.jsx)(d.Download,{className:"h-4 w-4"}),state:Q,loadingText:"PDF wird erzeugt...",successText:"PDF erzeugt",onClick:()=>b?eE():ey(),children:"PDF herunterladen"})]})]})})]})}function C({form:e,path:r}){return(0,t.jsxs)("div",{className:"mt-3 grid gap-3 rounded-lg border border-border p-4 md:grid-cols-[1fr_180px_1fr]",children:[(0,t.jsx)("input",{className:B,readOnly:!0,...e.register(`${r}.text`)}),(0,t.jsx)("select",{className:B,...e.register(`${r}.value`),children:y.map(e=>(0,t.jsx)("option",{value:e,children:"yes"===e?"Ja":"no"===e?"Nein":"Nicht zutreffend"},e))}),(0,t.jsx)("input",{className:B,placeholder:"Kommentar",...e.register(`${r}.comment`)})]})}function P({title:e,items:r,tone:a}){return(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:`font-semibold ${"danger"===a?"text-danger":"text-warning"}`,children:e}),0===r.length?(0,t.jsx)("p",{className:"mt-2 text-sm text-text-light",children:"Keine Eintraege."}):r.map(e=>(0,t.jsxs)("p",{className:"mt-2 text-sm",children:[e.section,": ",e.message]},`${e.field}-${e.message}`))]})}function M({form:e,index:r}){return(0,t.jsxs)("div",{className:"mb-3 grid gap-3 rounded-lg border border-border p-4 md:grid-cols-[80px_1fr]",children:[(0,t.jsx)("input",{type:"checkbox",className:"h-6 w-6",...e.register(`programs.${r}.selected`)}),(0,t.jsx)("input",{className:B,...e.register(`programs.${r}.name`)})]})}function V({form:e,index:r}){return(0,t.jsxs)("div",{className:"mb-4 rounded-lg border border-border p-4",children:[(0,t.jsxs)("h3",{className:"font-semibold",children:["Testlauf ",r+1]}),(0,t.jsxs)("div",{className:"mt-3 grid gap-3 md:grid-cols-2",children:[(0,t.jsx)("input",{className:B,placeholder:"Beladungsmuster",...e.register(`loading_patterns.${r}.pattern`)}),(0,t.jsx)("input",{className:B,placeholder:"Beschreibung",...e.register(`loading_patterns.${r}.description`)}),(0,t.jsx)("input",{type:"file",multiple:!0,className:"rounded-lg border border-border p-3 md:col-span-2"})]})]})}function D({form:e,index:r}){return(0,t.jsxs)("div",{className:"mb-4 rounded-lg border border-border p-4",children:[(0,t.jsx)("h3",{className:"font-semibold",children:String(e.watch(`measurement_data.${r}.name`)??"")}),(0,t.jsxs)("div",{className:"mt-3 grid gap-3 md:grid-cols-3",children:[["start_time","end_time","duration","leak_rate","min_temperature","max_temperature","temperature_band","equilibration_time","holding_time","pressure","result"].map(a=>(0,t.jsx)("input",{className:B,placeholder:a,...e.register(`measurement_data.${r}.${a}`)},a)),(0,t.jsx)("input",{type:"file",multiple:!0,accept:".csv,.pdf",className:"rounded-lg border border-border p-3 md:col-span-3"})]})]})}e.s(["ValidationEditor",0,$,"default",0,$],57344)}]); |