Files
secu-frontend/dist/assets/PartnershipsView-VpZWV3sV.js

2 lines
11 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{d as H,u as J,q as Q,m as g,c as n,a as e,y as V,e as d,F as x,x as h,b as M,v as T,t as r,n as y,r as o,k as U,o as l}from"./index-Dox4jtA_.js";const W={class:"space-y-6"},X={class:"flex items-center justify-between"},Y={key:0,class:"card bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200"},Z={class:"space-y-3"},ee={class:"font-medium"},te={class:"flex gap-2"},se=["onClick"],ae=["onClick"],ne={key:1,class:"text-center py-12 text-gray-500"},le={key:2,class:"card text-center py-12"},re={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},oe=["onClick"],ie={class:"flex items-start justify-between"},de={class:"text-xs text-gray-500"},ue={class:"font-semibold text-gray-900 dark:text-white"},ce={class:"mt-4 flex items-center gap-4 text-sm text-gray-500"},ve={key:4,class:"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4"},ge={class:"bg-white dark:bg-gray-800 rounded-xl shadow-xl max-w-md w-full p-6"},me={class:"space-y-4"},be={key:0,class:"p-3 bg-red-50 text-red-600 rounded-lg text-sm"},xe={class:"mt-6 flex justify-end gap-3"},ye=["disabled"],pe={key:5,class:"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4"},he={class:"bg-white dark:bg-gray-800 rounded-xl shadow-xl max-w-4xl w-full max-h-[90vh] overflow-hidden flex flex-col"},_e={class:"p-6 border-b dark:border-gray-700"},fe={class:"flex items-center justify-between"},ke={class:"text-xs text-gray-500"},we={class:"text-xl font-bold text-gray-900 dark:text-white"},Ce={class:"flex gap-4 mt-4"},Se={class:"p-6 overflow-y-auto flex-1"},$e={key:0},Ae={key:0,class:"space-y-3"},ze={class:"flex items-center justify-between"},De={class:"font-medium"},Fe={class:"text-sm text-gray-500"},je={key:1,class:"text-center text-gray-500 py-8"},Be={key:1},Ee={key:0,class:"space-y-3"},Pe={class:"flex items-center justify-between"},Le={class:"font-medium"},Ne={class:"text-sm text-gray-500"},Re={key:0,class:"text-sm font-medium text-green-600"},Ke={class:"flex items-center gap-2"},Oe=["onClick"],Ve=["onClick"],Me={key:1,class:"text-center text-gray-500 py-8"},Te={key:2},Ue={class:"grid grid-cols-3 gap-4 mb-6"},qe={class:"p-4 bg-yellow-50 dark:bg-yellow-900/20 rounded-lg text-center"},Ge={class:"text-2xl font-bold text-yellow-600"},Ie={class:"text-sm text-yellow-600"},He={class:"p-4 bg-green-50 dark:bg-green-900/20 rounded-lg text-center"},Je={class:"text-2xl font-bold text-green-600"},Qe={class:"text-sm text-green-600"},We={class:"p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg text-center"},Xe={class:"text-2xl font-bold text-blue-600"},Ye={class:"space-y-2"},Ze={class:"font-medium"},et={class:"text-gray-500 ml-2"},tt={class:"text-right"},st={class:"font-medium"},at={class:"text-sm text-gray-500"},rt=H({__name:"PartnershipsView",setup(nt){const B=J(),S=o(!0),$=o([]),u=o(null),p=o(!1),A=o(!1),b=o(""),_=o(""),f=o(!1),k=o(""),z=o(null),w=o([]),v=o(null),c=o("orders");Q(async()=>{await D()});async function D(){S.value=!0;try{const a=await g.get("/partnerships");$.value=a.data.partnerships}catch(a){console.error("Load partnerships failed:",a)}S.value=!1}async function q(){if(b.value){f.value=!0,k.value="";try{await g.post("/partnerships/invite",{subcontractor_slug:b.value,notes:_.value||void 0}),p.value=!1,b.value="",_.value="",await D()}catch(a){k.value=a instanceof Error?a.message:"Einladung fehlgeschlagen"}f.value=!1}}async function E(a,s){try{await g.post(`/partnerships/${a.id}/respond`,{accept:s}),await D()}catch(i){alert("Fehler: "+(i instanceof Error?i.message:"Unbekannt"))}}async function G(a){u.value=a,A.value=!0,c.value="orders";try{const[s,i,C]=await Promise.all([g.get(`/partnerships/${a.id}`),g.get(`/partnerships/${a.id}/timesheets`),g.get(`/partnerships/${a.id}/billing`)]);z.value=s.data,w.value=i.data.timesheets,v.value=C.data}catch(s){console.error("Load detail failed:",s)}}async function P(a,s){if(u.value)try{await g.post(`/partnerships/${u.value.id}/timesheets/${a.id}/review`,{approve:s,dispute_reason:s?void 0:prompt("Grund für Beanstandung:")});const i=await g.get(`/partnerships/${u.value.id}/timesheets`);w.value=i.data.timesheets}catch(i){alert("Fehler: "+(i instanceof Error?i.message:"Unbekannt"))}}const L=U(()=>$.value.filter(a=>a.status==="pending"&&a.my_role==="subcontractor")),N=U(()=>$.value.filter(a=>a.status==="active"));function I(a){return(a/100).toFixed(2).replace(".",",")+" €"}function R(a){return new Date(a).toLocaleDateString("de-DE")}function F(a){return{pending:"badge-warning",active:"badge-success",paused:"badge-secondary",terminated:"badge-danger",requested:"badge-primary",accepted:"badge-success",declined:"badge-danger",approved:"badge-success",disputed:"badge-danger"}[a]||"badge-secondary"}function j(a){return{pending:"Ausstehend",active:"Aktiv",paused:"Pausiert",terminated:"Beendet",requested:"Angefragt",accepted:"Angenommen",declined:"Abgelehnt",approved:"Genehmigt",disputed:"Beanstandet"}[a]||a}return(a,s)=>{var i,C;return l(),n("div",W,[e("div",X,[s[9]||(s[9]=e("div",null,[e("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"}," 🤝 Subunternehmer "),e("p",{class:"text-gray-500 dark:text-gray-400"}," Partnerschaften und Abrechnungen ")],-1)),V(B).isChef?(l(),n("button",{key:0,onClick:s[0]||(s[0]=t=>p.value=!0),class:"btn btn-primary"}," + Subunternehmer einladen ")):d("",!0)]),L.value.length>0?(l(),n("div",Y,[s[11]||(s[11]=e("h2",{class:"text-lg font-semibold text-yellow-800 dark:text-yellow-200 mb-4"}," 📬 Offene Einladungen ",-1)),e("div",Z,[(l(!0),n(x,null,h(L.value,t=>(l(),n("div",{key:t.id,class:"flex items-center justify-between p-4 bg-white dark:bg-gray-800 rounded-lg"},[e("div",null,[e("span",ee,r(t.contractor_name),1),s[10]||(s[10]=e("span",{class:"text-gray-500"}," möchte Sie als Subunternehmer",-1))]),e("div",te,[e("button",{onClick:m=>E(t,!0),class:"btn btn-success text-sm"}," Annehmen ",8,se),e("button",{onClick:m=>E(t,!1),class:"btn btn-danger text-sm"}," Ablehnen ",8,ae)])]))),128))])])):d("",!0),S.value?(l(),n("div",ne," Lädt... ")):N.value.length===0?(l(),n("div",le,[s[12]||(s[12]=e("span",{class:"text-4xl"},"🤝",-1)),s[13]||(s[13]=e("p",{class:"mt-4 text-gray-500"},"Noch keine aktiven Partnerschaften",-1)),V(B).isChef?(l(),n("button",{key:0,onClick:s[1]||(s[1]=t=>p.value=!0),class:"btn btn-primary mt-4"}," Subunternehmer einladen ")):d("",!0)])):(l(),n("div",re,[(l(!0),n(x,null,h(N.value,t=>(l(),n("div",{key:t.id,class:"card hover:shadow-lg transition-shadow cursor-pointer",onClick:m=>G(t)},[e("div",ie,[e("div",null,[e("span",de,r(t.my_role==="contractor"?"Subunternehmer":"Hauptunternehmer"),1),e("h3",ue,r(t.my_role==="contractor"?t.subcontractor_name:t.contractor_name),1)]),e("span",{class:y(["badge",F(t.status)])},r(j(t.status)),3)]),e("div",ce,[e("span",null,"📋 "+r(t.shared_orders_count)+" Aufträge",1),e("span",null,"💰 "+r(t.rates_count)+" Sätze",1)])],8,oe))),128))])),p.value?(l(),n("div",ve,[e("div",ge,[s[17]||(s[17]=e("h2",{class:"text-xl font-bold text-gray-900 dark:text-white mb-4"}," Subunternehmer einladen ",-1)),e("div",me,[e("div",null,[s[14]||(s[14]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Organisation (Kürzel) ",-1)),M(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>b.value=t),type:"text",class:"input",placeholder:"z.B. muster-security"},null,512),[[T,b.value]]),s[15]||(s[15]=e("p",{class:"mt-1 text-xs text-gray-500"}," Das Kürzel, mit dem sich die Organisation registriert hat ",-1))]),e("div",null,[s[16]||(s[16]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Notizen (optional) ",-1)),M(e("textarea",{"onUpdate:modelValue":s[3]||(s[3]=t=>_.value=t),class:"input",rows:"2",placeholder:"z.B. Rahmenvertrag vom 01.01.2026"},null,512),[[T,_.value]])]),k.value?(l(),n("div",be,r(k.value),1)):d("",!0)]),e("div",xe,[e("button",{onClick:s[4]||(s[4]=t=>p.value=!1),class:"btn btn-secondary"}," Abbrechen "),e("button",{onClick:q,disabled:f.value||!b.value,class:"btn btn-primary"},r(f.value?"Lädt...":"Einladen"),9,ye)])])])):d("",!0),A.value&&u.value?(l(),n("div",pe,[e("div",he,[e("div",_e,[e("div",fe,[e("div",null,[e("span",ke,r(u.value.my_role==="contractor"?"Subunternehmer":"Hauptunternehmer"),1),e("h2",we,r(u.value.my_role==="contractor"?u.value.subcontractor_name:u.value.contractor_name),1)]),e("button",{onClick:s[5]||(s[5]=t=>A.value=!1),class:"text-gray-400 hover:text-gray-600 text-2xl"}," × ")]),e("div",Ce,[e("button",{onClick:s[6]||(s[6]=t=>c.value="orders"),class:y(["px-4 py-2 rounded-lg",c.value==="orders"?"bg-primary-100 text-primary-700":"text-gray-500"])}," 📋 Aufträge ",2),e("button",{onClick:s[7]||(s[7]=t=>c.value="timesheets"),class:y(["px-4 py-2 rounded-lg",c.value==="timesheets"?"bg-primary-100 text-primary-700":"text-gray-500"])}," ⏱️ Stundenzettel ",2),e("button",{onClick:s[8]||(s[8]=t=>c.value="billing"),class:y(["px-4 py-2 rounded-lg",c.value==="billing"?"bg-primary-100 text-primary-700":"text-gray-500"])}," 💰 Abrechnung ",2)])]),e("div",Se,[c.value==="orders"?(l(),n("div",$e,[(C=(i=z.value)==null?void 0:i.recentOrders)!=null&&C.length?(l(),n("div",Ae,[(l(!0),n(x,null,h(z.value.recentOrders,t=>(l(),n("div",{key:t.id,class:"p-4 bg-gray-50 dark:bg-gray-700 rounded-lg"},[e("div",ze,[e("div",null,[e("span",De,r(t.order_title),1),e("div",Fe,r(t.start_time?R(t.start_time):"Kein Datum"),1)]),e("span",{class:y(["badge",F(t.status)])},r(j(t.status)),3)])]))),128))])):(l(),n("div",je," Keine geteilten Aufträge "))])):d("",!0),c.value==="timesheets"?(l(),n("div",Be,[w.value.length?(l(),n("div",Ee,[(l(!0),n(x,null,h(w.value,t=>(l(),n("div",{key:t.id,class:"p-4 bg-gray-50 dark:bg-gray-700 rounded-lg"},[e("div",Pe,[e("div",null,[e("span",Le,r(t.worker_name),1),e("div",Ne,r(R(t.work_date))+" • "+r(t.hours_worked)+"h • "+r(t.order_title),1),t.calculated_amount_cents?(l(),n("div",Re,r(I(t.calculated_amount_cents)),1)):d("",!0)]),e("div",Ke,[e("span",{class:y(["badge",F(t.approval_status)])},r(j(t.approval_status)),3),u.value.my_role==="contractor"&&t.approval_status==="pending"?(l(),n(x,{key:0},[e("button",{onClick:m=>P(t,!0),class:"btn btn-success text-xs"},"✓",8,Oe),e("button",{onClick:m=>P(t,!1),class:"btn btn-danger text-xs"},"✗",8,Ve)],64)):d("",!0)])])]))),128))])):(l(),n("div",Me," Keine Stundenzettel "))])):d("",!0),c.value==="billing"&&v.value?(l(),n("div",Te,[e("div",Ue,[e("div",qe,[e("div",Ge,r(v.value.summary.pending.amount.toFixed(2))+" € ",1),e("div",Ie,r(v.value.summary.pending.count)+" ausstehend",1)]),e("div",He,[e("div",Je,r(v.value.summary.approved.amount.toFixed(2))+" € ",1),e("div",Qe,r(v.value.summary.approved.count)+" genehmigt",1)]),e("div",We,[e("div",Xe,r(v.value.summary.approved.hours.toFixed(1))+" h ",1),s[18]||(s[18]=e("div",{class:"text-sm text-blue-600"},"Gesamt-Stunden",-1))])]),s[19]||(s[19]=e("h3",{class:"font-semibold text-gray-900 dark:text-white mb-3"},"Nach Stundensatz",-1)),e("div",Ye,[(l(!0),n(x,null,h(v.value.byRate,t=>{var m,K,O;return l(),n("div",{key:t.rate_name,class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700 rounded-lg"},[e("div",null,[e("span",Ze,r(t.rate_name||"Standard"),1),e("span",et,r((m=t.rate_amount)==null?void 0:m.toFixed(2))+" €/h",1)]),e("div",tt,[e("div",st,r((K=t.total_amount)==null?void 0:K.toFixed(2))+" €",1),e("div",at,r((O=t.total_hours)==null?void 0:O.toFixed(1))+"h",1)])])}),128))])])):d("",!0)])])])):d("",!0)])}}});export{rt as default};