- LockScreen component with PIN pad - SecuritySettings for setup - Biometric (WebAuthn) support - PIN fallback (6 digits) - Auto-lock after 30s in background - Lock on app start if enabled - Settings page integration
2 lines
30 KiB
JavaScript
2 lines
30 KiB
JavaScript
import{d as ge,u as ve,q as ye,m as u,c as n,a as e,n as w,t as r,F as h,x as k,e as p,b as f,v as A,p as S,B as me,s as Y,r as c,o as l}from"./index-OvQoqblD.js";const be={class:"p-6"},he={class:"flex justify-between items-center mb-6"},fe={class:"flex space-x-1 border-b mb-6"},_e={key:0,class:"text-center py-12"},we={key:1},ke={class:"grid grid-cols-4 gap-4 mb-6"},Ce={class:"bg-white rounded-lg shadow p-4"},Ae={class:"text-2xl font-bold text-gray-900"},Se={class:"bg-white rounded-lg shadow p-4"},$e={class:"text-2xl font-bold text-green-600"},ze={class:"bg-white rounded-lg shadow p-4"},Fe={class:"text-2xl font-bold text-blue-600"},Be={class:"bg-white rounded-lg shadow p-4"},Ve={class:"text-2xl font-bold text-yellow-600"},Pe={key:0,class:"mb-6"},Ne={class:"space-y-2"},je={class:"font-medium"},Oe={class:"flex space-x-2"},Re=["onClick"],Me=["onClick"],Ue={class:"mb-6"},De={key:0,class:"bg-gray-50 rounded-lg p-8 text-center text-gray-500"},Ie={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},qe={class:"min-w-full divide-y divide-gray-200"},Te={class:"divide-y divide-gray-200"},Ee={class:"px-4 py-3"},Le={class:"font-medium"},Ke={class:"text-gray-500 text-sm ml-2"},We={class:"px-4 py-3"},Ge={class:"px-4 py-3 text-sm"},Qe={key:0,class:"text-yellow-600 ml-1"},Ze={class:"px-4 py-3 text-right space-x-2"},He=["onClick"],Je=["onClick"],Xe={key:0,class:"bg-gray-50 rounded-lg p-8 text-center text-gray-500"},Ye={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},et={class:"min-w-full divide-y divide-gray-200"},tt={class:"divide-y divide-gray-200"},st={class:"px-4 py-3"},at={class:"font-medium"},nt={class:"px-4 py-3"},lt={class:"px-4 py-3 text-sm"},rt={key:0,class:"text-yellow-600 ml-1"},ot={class:"px-4 py-3 text-right"},dt=["onClick"],it={key:2},ut={class:"grid grid-cols-2 gap-6"},ct={key:0,class:"bg-gray-50 rounded-lg p-6 text-center text-gray-500"},pt={key:1,class:"space-y-2"},xt={class:"flex justify-between items-start"},gt={class:"font-medium"},vt={class:"text-sm text-gray-500"},yt={class:"text-sm text-gray-500"},mt={class:"text-sm mt-1"},bt={class:"font-medium"},ht={class:"text-right"},ft={key:0,class:"text-sm text-gray-500 mt-1"},_t={key:0,class:"mt-2 pt-2 border-t"},wt=["onClick"],kt={key:0,class:"bg-gray-50 rounded-lg p-6 text-center text-gray-500"},Ct={key:1,class:"space-y-2"},At={class:"flex justify-between items-start"},St={class:"font-medium"},$t={class:"text-sm text-gray-500"},zt={class:"text-sm text-gray-500"},Ft={class:"text-sm mt-1"},Bt={class:"font-medium"},Vt={class:"text-right"},Pt={key:0,class:"mt-2 pt-2 border-t flex space-x-2"},Nt=["onClick"],jt=["onClick"],Ot={key:3},Rt={key:0,class:"bg-gray-50 rounded-lg p-12 text-center text-gray-500"},Mt={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},Ut={class:"min-w-full divide-y divide-gray-200"},Dt={class:"divide-y divide-gray-200"},It={class:"px-4 py-3"},qt={class:"px-4 py-3"},Tt={class:"px-4 py-3"},Et={class:"px-4 py-3"},Lt={class:"px-4 py-3"},Kt={class:"px-4 py-3"},Wt={class:"px-4 py-3 text-right space-x-2"},Gt=["onClick"],Qt=["onClick"],Zt={key:4},Ht={key:0,class:"bg-gray-50 rounded-lg p-12 text-center text-gray-500"},Jt={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},Xt={class:"min-w-full divide-y divide-gray-200"},Yt={class:"divide-y divide-gray-200"},es={class:"px-4 py-3 font-mono"},ts={class:"px-4 py-3"},ss={class:"px-4 py-3"},as={class:"px-4 py-3"},ns={key:0,class:"text-red-600"},ls={key:1,class:"text-green-600"},rs={class:"px-4 py-3 text-right font-medium"},os={class:"px-4 py-3"},ds={class:"px-4 py-3 text-right"},is=["onClick"],us={key:5,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},cs={class:"bg-white rounded-lg shadow-xl w-full max-w-md p-6"},ps={class:"space-y-4"},xs={key:0,class:"mt-1 border rounded-lg shadow-sm max-h-40 overflow-y-auto"},gs=["onClick"],vs={class:"text-gray-500"},ys={class:"flex justify-end space-x-2 mt-6"},ms=["disabled"],bs={key:6,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},hs={class:"bg-white rounded-lg shadow-xl w-full max-w-2xl p-6 max-h-[90vh] overflow-y-auto"},fs={class:"flex justify-between items-start mb-4"},_s={class:"text-xl font-bold"},ws={class:"grid grid-cols-2 gap-4 mb-6 text-sm"},ks={key:0},Cs={key:0,class:"mb-6"},As={key:0,class:"text-gray-500 text-sm"},Ss={key:1,class:"space-y-2"},$s={class:"font-medium"},zs={key:0,class:"text-xs text-blue-600 ml-2"},Fs={class:"flex items-center space-x-4"},Bs={class:"font-mono"},Vs=["onClick"],Ps={key:1,class:"grid grid-cols-3 gap-4 mb-6"},Ns={class:"bg-gray-50 rounded p-3 text-center"},js={class:"text-xl font-bold"},Os={class:"bg-gray-50 rounded p-3 text-center"},Rs={class:"text-xl font-bold"},Ms={class:"bg-gray-50 rounded p-3 text-center"},Us={class:"text-xl font-bold"},Ds={key:2,class:"flex space-x-2"},Is={key:3,class:"flex space-x-2"},qs={key:7,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},Ts={class:"bg-white rounded-lg shadow-xl w-full max-w-md p-6"},Es={class:"space-y-4"},Ls={class:"flex items-center"},Ks={class:"flex justify-end space-x-2 mt-6"},Ws={key:8,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},Gs={class:"bg-white rounded-lg shadow-xl w-full max-w-md p-6"},Qs={class:"text-xl font-bold mb-4"},Zs={class:"space-y-4"},Hs=["value"],Js=["value"],Xs={class:"flex justify-end space-x-2 mt-6"},Ys=["disabled"],sa=ge({__name:"PartnershipsView",setup(ea){ve();const D=c(!0),I=c([]),F=c([]),B=c({}),m=c("overview"),j=c(!1),q=c(!1),O=c(!1),R=c(!1),T=c(null),i=c(null),$=c(""),z=c([]),G=c(!1),g=c({subcontractor_slug:"",notes:"",contract_start:"",contract_end:""}),M=c(!1),y=c({name:"",description:"",rate_type:"hourly",amount:0,is_default:!1}),V=c({asContractor:[],asSubcontractor:[]}),E=c([]),L=c([]),Q=c([]),x=c({partnership_id:"",order_id:"",rate_id:"",required_staff:1,notes:""});ye(async()=>{await P()});async function P(){D.value=!0;try{const a=await u.get("/partnerships");I.value=a.data.asContractor||[],F.value=a.data.asSubcontractor||[],B.value=a.data.stats||{}}catch(a){console.error("Load partnerships failed:",a)}D.value=!1}async function ee(){if($.value.length<2){z.value=[];return}G.value=!0;try{const a=await u.get(`/partnerships/search/orgs?q=${encodeURIComponent($.value)}`);z.value=a.data}catch(a){console.error("Search failed:",a)}G.value=!1}function te(a){g.value.subcontractor_slug=a.slug,$.value=a.name,z.value=[]}async function se(){var a,t;if(g.value.subcontractor_slug){M.value=!0;try{await u.post("/partnerships",{subcontractor_slug:g.value.subcontractor_slug,notes:g.value.notes||void 0,contract_start:g.value.contract_start||void 0,contract_end:g.value.contract_end||void 0}),j.value=!1,Z(),await P()}catch(o){alert("Fehler: "+(((t=(a=o.response)==null?void 0:a.data)==null?void 0:t.error)||o.message))}M.value=!1}}function Z(){g.value={subcontractor_slug:"",notes:"",contract_start:"",contract_end:""},$.value="",z.value=[]}async function ae(a){var t,o;try{await u.post(`/partnerships/${a.id}/accept`),await P()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function ne(a){var t,o;if(confirm("Einladung wirklich ablehnen?"))try{await u.post(`/partnerships/${a.id}/decline`),await P()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function K(a,t){var o,d,_;if(confirm(`Status auf "${t}" ändern?`))try{await u.put(`/partnerships/${a.id}/status`,{status:t}),await P(),((o=i.value)==null?void 0:o.id)===a.id&&(i.value.status=t)}catch(s){alert("Fehler: "+(((_=(d=s.response)==null?void 0:d.data)==null?void 0:_.error)||s.message))}}async function H(a){var t,o;T.value=a;try{const d=await u.get(`/partnerships/${a.id}`);i.value=d.data,q.value=!0}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}function le(){y.value={name:"",description:"",rate_type:"hourly",amount:0,is_default:!1},O.value=!0}async function re(){var a,t;if(!y.value.name||!y.value.amount){alert("Name und Betrag erforderlich");return}try{await u.post(`/partnerships/${i.value.id}/rates`,{...y.value,amount_cents:Math.round(y.value.amount*100)});const o=await u.get(`/partnerships/${i.value.id}`);i.value=o.data,O.value=!1}catch(o){alert("Fehler: "+(((t=(a=o.response)==null?void 0:a.data)==null?void 0:t.error)||o.message))}}async function oe(a){var t,o;if(confirm(`Satz "${a.name}" löschen?`))try{await u.delete(`/partnerships/${i.value.id}/rates/${a.id}`);const d=await u.get(`/partnerships/${i.value.id}`);i.value=d.data}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function U(){m.value="orders";try{const a=await u.get("/partnerships/orders/list");V.value=a.data}catch(a){console.error("Load shared orders failed:",a)}}async function de(a){T.value=a,x.value={partnership_id:a.id,order_id:"",rate_id:"",required_staff:1,notes:""};try{const t=await u.get("/orders");Q.value=t.data.orders||t.data||[];const o=await u.get(`/partnerships/${a.id}/rates`);i.value={...a,rates:o.data},R.value=!0}catch(t){console.error("Load orders failed:",t)}}async function ie(){var a,t;if(!x.value.order_id){alert("Bitte Auftrag auswählen");return}try{await u.post("/partnerships/orders",{partnership_id:x.value.partnership_id,order_id:x.value.order_id,rate_id:x.value.rate_id||void 0,required_staff:x.value.required_staff,notes:x.value.notes||void 0}),R.value=!1,await U()}catch(o){alert("Fehler: "+(((t=(a=o.response)==null?void 0:a.data)==null?void 0:t.error)||o.message))}}async function J(a,t){var o,d;try{await u.post(`/partnerships/orders/${a.id}/respond`,{accept:t,notes:""}),await U()}catch(_){alert("Fehler: "+(((d=(o=_.response)==null?void 0:o.data)==null?void 0:d.error)||_.message))}}async function ue(a){var t,o;if(confirm("Auftrag abschließen?"))try{await u.post(`/partnerships/orders/${a.id}/complete`),await U()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function W(){m.value="timesheets";try{const a=await u.get("/partnerships/timesheets/list");E.value=a.data}catch(a){console.error("Load timesheets failed:",a)}}async function ce(a){var t,o;try{await u.post(`/partnerships/timesheets/${a.id}/approve`),await W()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function pe(a){var o,d;const t=prompt("Grund für Beanstandung:");if(t)try{await u.post(`/partnerships/timesheets/${a.id}/dispute`,{reason:t}),await W()}catch(_){alert("Fehler: "+(((d=(o=_.response)==null?void 0:o.data)==null?void 0:d.error)||_.message))}}async function X(){m.value="invoices";try{const a=await u.get("/partnerships/invoices/list");L.value=a.data}catch(a){console.error("Load invoices failed:",a)}}async function xe(a){var t,o;if(confirm("Rechnung als bezahlt markieren?"))try{await u.put(`/partnerships/invoices/${a.id}/pay`),await X()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}function N(a){return(a/100).toFixed(2).replace(".",",")+" €"}function C(a){return a?new Date(a).toLocaleDateString("de-DE"):"-"}function v(a){return{pending:{text:"Ausstehend",class:"bg-yellow-100 text-yellow-800"},active:{text:"Aktiv",class:"bg-green-100 text-green-800"},paused:{text:"Pausiert",class:"bg-gray-100 text-gray-800"},terminated:{text:"Beendet",class:"bg-red-100 text-red-800"},requested:{text:"Angefragt",class:"bg-blue-100 text-blue-800"},accepted:{text:"Angenommen",class:"bg-green-100 text-green-800"},declined:{text:"Abgelehnt",class:"bg-red-100 text-red-800"},completed:{text:"Abgeschlossen",class:"bg-gray-100 text-gray-800"},approved:{text:"Freigegeben",class:"bg-green-100 text-green-800"},disputed:{text:"Beanstandet",class:"bg-red-100 text-red-800"},draft:{text:"Entwurf",class:"bg-gray-100 text-gray-800"},sent:{text:"Gesendet",class:"bg-blue-100 text-blue-800"},paid:{text:"Bezahlt",class:"bg-green-100 text-green-800"}}[a]||{text:a,class:"bg-gray-100 text-gray-800"}}return(a,t)=>{var o,d,_;return l(),n("div",be,[e("div",he,[t[24]||(t[24]=e("div",null,[e("h1",{class:"text-2xl font-bold text-gray-900"},"🤝 Subunternehmer"),e("p",{class:"text-gray-500"},"Partnerschaften mit anderen Sicherheitsunternehmen")],-1)),e("button",{onClick:t[0]||(t[0]=s=>j.value=!0),class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700"}," + Partner einladen ")]),e("div",fe,[e("button",{onClick:t[1]||(t[1]=s=>m.value="overview"),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="overview"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Übersicht ",2),e("button",{onClick:t[2]||(t[2]=s=>U()),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="orders"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Geteilte Aufträge ",2),e("button",{onClick:t[3]||(t[3]=s=>W()),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="timesheets"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Stundenzettel ",2),e("button",{onClick:t[4]||(t[4]=s=>X()),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="invoices"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Rechnungen ",2)]),D.value?(l(),n("div",_e,[...t[25]||(t[25]=[e("div",{class:"animate-spin w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full mx-auto"},null,-1)])])):m.value==="overview"?(l(),n("div",we,[e("div",ke,[e("div",Ce,[e("div",Ae,r(B.value.totalPartnerships||0),1),t[26]||(t[26]=e("div",{class:"text-sm text-gray-500"},"Partnerschaften",-1))]),e("div",Se,[e("div",$e,r(B.value.activeAsContractor||0),1),t[27]||(t[27]=e("div",{class:"text-sm text-gray-500"},"Als Auftraggeber",-1))]),e("div",ze,[e("div",Fe,r(B.value.activeAsSubcontractor||0),1),t[28]||(t[28]=e("div",{class:"text-sm text-gray-500"},"Als Subunternehmer",-1))]),e("div",Be,[e("div",Ve,r(B.value.pendingInvitations||0),1),t[29]||(t[29]=e("div",{class:"text-sm text-gray-500"},"Offene Einladungen",-1))])]),F.value.filter(s=>s.status==="pending").length>0?(l(),n("div",Pe,[t[31]||(t[31]=e("h2",{class:"text-lg font-semibold mb-3"},"📩 Offene Einladungen",-1)),e("div",Ne,[(l(!0),n(h,null,k(F.value.filter(s=>s.status==="pending"),s=>(l(),n("div",{key:s.id,class:"bg-yellow-50 border border-yellow-200 rounded-lg p-4 flex justify-between items-center"},[e("div",null,[e("span",je,r(s.partner_name),1),t[30]||(t[30]=S(" möchte mit Ihnen zusammenarbeiten ",-1))]),e("div",Oe,[e("button",{onClick:b=>ae(s),class:"px-3 py-1 bg-green-600 text-white rounded hover:bg-green-700"}," Annehmen ",8,Re),e("button",{onClick:b=>ne(s),class:"px-3 py-1 bg-red-100 text-red-700 rounded hover:bg-red-200"}," Ablehnen ",8,Me)])]))),128))])])):p("",!0),e("div",Ue,[t[33]||(t[33]=e("h2",{class:"text-lg font-semibold mb-3"},"🏢 Wir als Auftraggeber",-1)),I.value.length===0?(l(),n("div",De," Noch keine Subunternehmer eingeladen ")):(l(),n("div",Ie,[e("table",qe,[t[32]||(t[32]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Subunternehmer"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Aufträge"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",Te,[(l(!0),n(h,null,k(I.value,s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",Ee,[e("span",Le,r(s.partner_name),1),e("span",Ke,"@"+r(s.partner_slug),1)]),e("td",We,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)]),e("td",Ge,[S(r(s.shared_orders_count||0)+" geteilt ",1),s.pending_orders>0?(l(),n("span",Qe," ("+r(s.pending_orders)+" offen) ",1)):p("",!0)]),e("td",Ze,[e("button",{onClick:b=>H(s),class:"text-blue-600 hover:text-blue-800"}," Details ",8,He),s.status==="active"?(l(),n("button",{key:0,onClick:b=>de(s),class:"text-green-600 hover:text-green-800"}," Auftrag teilen ",8,Je)):p("",!0)])]))),128))])])]))]),e("div",null,[t[35]||(t[35]=e("h2",{class:"text-lg font-semibold mb-3"},"👷 Wir als Subunternehmer",-1)),F.value.filter(s=>s.status!=="pending").length===0?(l(),n("div",Xe," Keine aktiven Partnerschaften als Subunternehmer ")):(l(),n("div",Ye,[e("table",et,[t[34]||(t[34]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Auftraggeber"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Aufträge"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",tt,[(l(!0),n(h,null,k(F.value.filter(s=>s.status!=="pending"),s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",st,[e("span",at,r(s.partner_name),1)]),e("td",nt,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)]),e("td",lt,[S(r(s.shared_orders_count||0)+" erhalten ",1),s.pending_orders>0?(l(),n("span",rt," ("+r(s.pending_orders)+" offen) ",1)):p("",!0)]),e("td",ot,[e("button",{onClick:b=>H(s),class:"text-blue-600 hover:text-blue-800"}," Details ",8,dt)])]))),128))])])]))])])):m.value==="orders"?(l(),n("div",it,[e("div",ut,[e("div",null,[t[37]||(t[37]=e("h2",{class:"text-lg font-semibold mb-3"},"📤 Von uns geteilt",-1)),V.value.asContractor.length===0?(l(),n("div",ct," Keine geteilten Aufträge ")):(l(),n("div",pt,[(l(!0),n(h,null,k(V.value.asContractor,s=>(l(),n("div",{key:s.id,class:"bg-white rounded-lg shadow p-4"},[e("div",xt,[e("div",null,[e("div",gt,r(s.order_title),1),e("div",vt,r(s.location),1),e("div",yt,r(C(s.start_date))+" - "+r(C(s.end_date)),1),e("div",mt,[t[36]||(t[36]=S(" → ",-1)),e("span",bt,r(s.subcontractor_name),1)])]),e("div",ht,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3),s.rate_name?(l(),n("div",ft,r(s.rate_name)+": "+r(N(s.rate_amount))+"/h ",1)):p("",!0)])]),s.status==="accepted"?(l(),n("div",_t,[e("button",{onClick:b=>ue(s),class:"text-sm text-green-600 hover:text-green-800"}," ✓ Abschließen ",8,wt)])):p("",!0)]))),128))]))]),e("div",null,[t[39]||(t[39]=e("h2",{class:"text-lg font-semibold mb-3"},"📥 An uns übertragen",-1)),V.value.asSubcontractor.length===0?(l(),n("div",kt," Keine erhaltenen Aufträge ")):(l(),n("div",Ct,[(l(!0),n(h,null,k(V.value.asSubcontractor,s=>(l(),n("div",{key:s.id,class:"bg-white rounded-lg shadow p-4"},[e("div",At,[e("div",null,[e("div",St,r(s.order_title),1),e("div",$t,r(s.location),1),e("div",zt,r(C(s.start_date))+" - "+r(C(s.end_date)),1),e("div",Ft,[t[38]||(t[38]=S(" ← ",-1)),e("span",Bt,r(s.contractor_name),1)])]),e("div",Vt,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)])]),s.status==="requested"?(l(),n("div",Pt,[e("button",{onClick:b=>J(s,!0),class:"text-sm px-3 py-1 bg-green-600 text-white rounded hover:bg-green-700"}," Annehmen ",8,Nt),e("button",{onClick:b=>J(s,!1),class:"text-sm px-3 py-1 bg-red-100 text-red-700 rounded hover:bg-red-200"}," Ablehnen ",8,jt)])):p("",!0)]))),128))]))])])])):m.value==="timesheets"?(l(),n("div",Ot,[E.value.length===0?(l(),n("div",Rt," Keine Partnership-Stundenzettel vorhanden ")):(l(),n("div",Mt,[e("table",Ut,[t[40]||(t[40]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Datum"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Mitarbeiter"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Auftrag"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Stunden"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Betrag"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",Dt,[(l(!0),n(h,null,k(E.value,s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",It,r(C(s.date)),1),e("td",qt,r(s.first_name)+" "+r(s.last_name),1),e("td",Tt,r(s.order_title),1),e("td",Et,r(s.hours_worked)+"h",1),e("td",Lt,r(s.calculated_amount_cents?N(s.calculated_amount_cents):"-"),1),e("td",Kt,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.approval_status).class])},r(v(s.approval_status).text),3)]),e("td",Wt,[s.approval_status==="pending"?(l(),n(h,{key:0},[e("button",{onClick:b=>ce(s),class:"text-green-600 hover:text-green-800"}," ✓ Freigeben ",8,Gt),e("button",{onClick:b=>pe(s),class:"text-red-600 hover:text-red-800"}," ✗ Beanstanden ",8,Qt)],64)):p("",!0)])]))),128))])])]))])):m.value==="invoices"?(l(),n("div",Zt,[L.value.length===0?(l(),n("div",Ht," Keine Rechnungen vorhanden ")):(l(),n("div",Jt,[e("table",Xt,[t[41]||(t[41]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Nr."),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Partner"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Zeitraum"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Richtung"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Betrag"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",Yt,[(l(!0),n(h,null,k(L.value,s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",es,r(s.invoice_number),1),e("td",ts,r(s.partner_name),1),e("td",ss,r(C(s.period_start))+" - "+r(C(s.period_end)),1),e("td",as,[s.direction==="outgoing"?(l(),n("span",ns,"📤 Ausgehend")):(l(),n("span",ls,"📥 Eingehend"))]),e("td",rs,r(N(s.total_cents)),1),e("td",os,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)]),e("td",ds,[s.direction==="incoming"&&s.status==="sent"?(l(),n("button",{key:0,onClick:b=>xe(s),class:"text-green-600 hover:text-green-800"}," Als bezahlt markieren ",8,is)):p("",!0)])]))),128))])])]))])):p("",!0),j.value?(l(),n("div",us,[e("div",cs,[t[46]||(t[46]=e("h2",{class:"text-xl font-bold mb-4"},"Partner einladen",-1)),e("div",ps,[e("div",null,[t[42]||(t[42]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Organisation suchen",-1)),f(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>$.value=s),onInput:ee,type:"text",placeholder:"Name oder Slug eingeben...",class:"w-full border rounded-lg px-3 py-2"},null,544),[[A,$.value]]),z.value.length>0?(l(),n("div",xs,[(l(!0),n(h,null,k(z.value,s=>(l(),n("button",{key:s.id,onClick:b=>te(s),class:"w-full px-3 py-2 text-left hover:bg-gray-100"},[S(r(s.name)+" ",1),e("span",vs,"@"+r(s.slug),1)],8,gs))),128))])):p("",!0)]),e("div",null,[t[43]||(t[43]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Vertragsbeginn",-1)),f(e("input",{"onUpdate:modelValue":t[6]||(t[6]=s=>g.value.contract_start=s),type:"date",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,g.value.contract_start]])]),e("div",null,[t[44]||(t[44]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Vertragsende (optional)",-1)),f(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>g.value.contract_end=s),type:"date",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,g.value.contract_end]])]),e("div",null,[t[45]||(t[45]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Notizen",-1)),f(e("textarea",{"onUpdate:modelValue":t[8]||(t[8]=s=>g.value.notes=s),rows:"3",class:"w-full border rounded-lg px-3 py-2",placeholder:"Optionale Nachricht..."},null,512),[[A,g.value.notes]])])]),e("div",ys,[e("button",{onClick:t[9]||(t[9]=s=>{j.value=!1,Z()}),class:"px-4 py-2 text-gray-700 hover:bg-gray-100 rounded-lg"}," Abbrechen "),e("button",{onClick:se,disabled:M.value||!g.value.subcontractor_slug,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50"},r(M.value?"Wird gesendet...":"Einladung senden"),9,ms)])])])):p("",!0),q.value&&i.value?(l(),n("div",bs,[e("div",hs,[e("div",fs,[e("div",null,[e("h2",_s," Partnerschaft mit "+r(i.value.isContractor?i.value.subcontractor_name:i.value.contractor_name),1),e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(i.value.status).class])},r(v(i.value.status).text),3)]),e("button",{onClick:t[10]||(t[10]=s=>q.value=!1),class:"text-gray-500 hover:text-gray-700"},"✕")]),e("div",ws,[e("div",null,[t[47]||(t[47]=e("span",{class:"text-gray-500"},"Rolle:",-1)),S(" "+r(i.value.isContractor?"Wir sind Auftraggeber":"Wir sind Subunternehmer"),1)]),e("div",null,[t[48]||(t[48]=e("span",{class:"text-gray-500"},"Seit:",-1)),S(" "+r(C(i.value.contract_start||i.value.created_at)),1)]),i.value.contract_end?(l(),n("div",ks,[t[49]||(t[49]=e("span",{class:"text-gray-500"},"Bis:",-1)),S(" "+r(C(i.value.contract_end)),1)])):p("",!0)]),i.value.isContractor?(l(),n("div",Cs,[e("div",{class:"flex justify-between items-center mb-2"},[t[50]||(t[50]=e("h3",{class:"font-semibold"},"Stundensätze",-1)),e("button",{onClick:le,class:"text-sm text-blue-600 hover:text-blue-800"}," + Neuer Satz ")]),(o=i.value.rates)!=null&&o.length?(l(),n("div",Ss,[(l(!0),n(h,null,k(i.value.rates,s=>(l(),n("div",{key:s.id,class:"flex justify-between items-center bg-gray-50 rounded px-3 py-2"},[e("div",null,[e("span",$s,r(s.name),1),s.is_default?(l(),n("span",zs,"Standard")):p("",!0)]),e("div",Fs,[e("span",Bs,r(N(s.amount_cents))+"/h",1),e("button",{onClick:b=>oe(s),class:"text-red-500 hover:text-red-700"}," 🗑 ",8,Vs)])]))),128))])):(l(),n("div",As," Noch keine Sätze definiert "))])):p("",!0),i.value.stats?(l(),n("div",Ps,[e("div",Ns,[e("div",js,r(i.value.stats.completed_orders||0),1),t[51]||(t[51]=e("div",{class:"text-xs text-gray-500"},"Abgeschlossen",-1))]),e("div",Os,[e("div",Rs,r(i.value.stats.active_orders||0),1),t[52]||(t[52]=e("div",{class:"text-xs text-gray-500"},"Aktiv",-1))]),e("div",Ms,[e("div",Us,r(i.value.stats.pending_orders||0),1),t[53]||(t[53]=e("div",{class:"text-xs text-gray-500"},"Ausstehend",-1))])])):p("",!0),i.value.status==="active"?(l(),n("div",Ds,[e("button",{onClick:t[11]||(t[11]=s=>K(i.value,"paused")),class:"px-4 py-2 bg-yellow-100 text-yellow-700 rounded hover:bg-yellow-200"}," Pausieren "),e("button",{onClick:t[12]||(t[12]=s=>K(i.value,"terminated")),class:"px-4 py-2 bg-red-100 text-red-700 rounded hover:bg-red-200"}," Beenden ")])):i.value.status==="paused"?(l(),n("div",Is,[e("button",{onClick:t[13]||(t[13]=s=>K(i.value,"active")),class:"px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700"}," Reaktivieren ")])):p("",!0)])])):p("",!0),O.value?(l(),n("div",qs,[e("div",Ts,[t[58]||(t[58]=e("h2",{class:"text-xl font-bold mb-4"},"Neuer Stundensatz",-1)),e("div",Es,[e("div",null,[t[54]||(t[54]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Bezeichnung *",-1)),f(e("input",{"onUpdate:modelValue":t[14]||(t[14]=s=>y.value.name=s),type:"text",placeholder:"z.B. Normaldienst, Nachtschicht...",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,y.value.name]])]),e("div",null,[t[55]||(t[55]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Beschreibung",-1)),f(e("input",{"onUpdate:modelValue":t[15]||(t[15]=s=>y.value.description=s),type:"text",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,y.value.description]])]),e("div",null,[t[56]||(t[56]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Stundensatz (€) *",-1)),f(e("input",{"onUpdate:modelValue":t[16]||(t[16]=s=>y.value.amount=s),type:"number",step:"0.01",min:"0",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,y.value.amount,void 0,{number:!0}]])]),e("label",Ls,[f(e("input",{"onUpdate:modelValue":t[17]||(t[17]=s=>y.value.is_default=s),type:"checkbox",class:"mr-2"},null,512),[[me,y.value.is_default]]),t[57]||(t[57]=e("span",{class:"text-sm"},"Als Standard-Satz verwenden",-1))])]),e("div",Ks,[e("button",{onClick:t[18]||(t[18]=s=>O.value=!1),class:"px-4 py-2 text-gray-700 hover:bg-gray-100 rounded-lg"}," Abbrechen "),e("button",{onClick:re,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700"}," Speichern ")])])])):p("",!0),R.value?(l(),n("div",Ws,[e("div",Gs,[e("h2",Qs,"Auftrag teilen mit "+r((d=T.value)==null?void 0:d.partner_name),1),e("div",Zs,[e("div",null,[t[60]||(t[60]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Auftrag auswählen *",-1)),f(e("select",{"onUpdate:modelValue":t[19]||(t[19]=s=>x.value.order_id=s),class:"w-full border rounded-lg px-3 py-2"},[t[59]||(t[59]=e("option",{value:""},"Bitte wählen...",-1)),(l(!0),n(h,null,k(Q.value,s=>(l(),n("option",{key:s.id,value:s.id},r(s.title)+" ("+r(C(s.start_date))+") ",9,Hs))),128))],512),[[Y,x.value.order_id]])]),e("div",null,[t[62]||(t[62]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Stundensatz",-1)),f(e("select",{"onUpdate:modelValue":t[20]||(t[20]=s=>x.value.rate_id=s),class:"w-full border rounded-lg px-3 py-2"},[t[61]||(t[61]=e("option",{value:""},"Keiner / Später festlegen",-1)),(l(!0),n(h,null,k((_=i.value)==null?void 0:_.rates,s=>(l(),n("option",{key:s.id,value:s.id},r(s.name)+" ("+r(N(s.amount_cents))+"/h) ",9,Js))),128))],512),[[Y,x.value.rate_id]])]),e("div",null,[t[63]||(t[63]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Benötigte Mitarbeiter",-1)),f(e("input",{"onUpdate:modelValue":t[21]||(t[21]=s=>x.value.required_staff=s),type:"number",min:"1",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,x.value.required_staff,void 0,{number:!0}]])]),e("div",null,[t[64]||(t[64]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Notizen",-1)),f(e("textarea",{"onUpdate:modelValue":t[22]||(t[22]=s=>x.value.notes=s),rows:"2",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,x.value.notes]])])]),e("div",Xs,[e("button",{onClick:t[23]||(t[23]=s=>R.value=!1),class:"px-4 py-2 text-gray-700 hover:bg-gray-100 rounded-lg"}," Abbrechen "),e("button",{onClick:ie,disabled:!x.value.order_id,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50"}," Auftrag teilen ",8,Ys)])])])):p("",!0)])}}});export{sa as default};
|