1import{i as Ne,a6 as _e,p as be,r as y,j as e,B as u,L as $,s as n,X as N}from"./index-DjVh0B8p.js";import{u as D}from"./useQuery-DYPAF5VO.js";import{C as k,a as S}from"./card-DeJsvtu6.js";import{I as f}from"./input-CRN1F9Oj.js";import{L as d}from"./label-F8rgXToX.js";import{B as se}from"./badge-ClnE64rL.js";import{P as we}from"./progress-4rLXaxgM.js";import{T as Ce,a as De,b as A,c as P}from"./tabs-CHnzo_QL.js";import{S as T,a as q,b as E,c as B,d as i}from"./select-4RildTeG.js";import{T as te}from"./textarea-e7W02cr4.js";import{D as z,f as Q,a as U,b as V,c as I}from"./dialog-ByvHrRZl.js";import{A as ke}from"./arrow-left-Ca9s0yQI.js";import{P as O}from"./plus-C_XyCnln.js";import{C as R}from"./circle-check-big-BPd2lOIB.js";import{C as ae}from"./clock-D7WqhtRJ.js";import{C as H}from"./circle-aT_KXzwK.js";import{T as G}from"./trash-2-DDvnodmw.js";import{T as Se}from"./triangle-alert-R_tddejV.js";import{f as M}from"./format-ChptfRgd.js";import{i as re,d as Te}from"./isPast-DiMNWvJh.js";import"./index-BWS_xj_s.js";import"./index-C38J-C01.js";import"./Combination-CJxsEDFO.js";import"./index-FF3FW5Ba.js";import"./chevron-down-Dm3s8-uE.js";import"./check-BVCrj7RH.js";import"./index-X81-JaO5.js";function as(){const{id:a}=Ne(),{user:L}=_e(),w=be(),g=()=>{w.invalidateQueries({queryKey:["manage-project",a]}),w.invalidateQueries({queryKey:["manage-tasks",a]}),w.invalidateQueries({queryKey:["manage-budget",a]}),w.invalidateQueries({queryKey:["manage-deadlines",a]})},{data:l}=D({queryKey:["manage-project",a],queryFn:async()=>{const{data:s}=await n.from("projects").select("*").eq("id",a).single();return s}}),{data:h}=D({queryKey:["manage-tasks",a],queryFn:async()=>{const{data:s}=await n.from("project_tasks").select("*").eq("project_id",a).order("created_at");return s||[]},enabled:!!a}),{data:c}=D({queryKey:["manage-budget",a],queryFn:async()=>{const{data:s}=await n.from("project_budget_items").select("*").eq("project_id",a).order("category");return s||[]},enabled:!!a}),{data:o}=D({queryKey:["manage-deadlines",a],queryFn:async()=>{const{data:s}=await n.from("project_deadlines").select("*").eq("project_id",a).order("due_date");return s||[]},enabled:!!a}),[m,v]=y.useState({title:"",description:"",priority:"medium",due_date:"",category:"general"}),[ie,X]=y.useState(!1),ne=async()=>{if(!m.title)return;const{error:s}=await n.from("project_tasks").insert({project_id:a,title:m.title,description:m.description||null,priority:m.priority,due_date:m.due_date||null,category:m.category,created_by:L==null?void 0:L.id});if(s){N.error(s.message);return}N.success("Uppgift tillagd"),v({title:"",description:"",priority:"medium",due_date:"",category:"general"}),X(!1),g()},de=async(s,t)=>{await n.from("project_tasks").update({status:t}).eq("id",s),g()},le=async s=>{await n.from("project_tasks").delete().eq("id",s),g()},[p,_]=y.useState({category:"",description:"",budgeted_amount:"",actual_amount:""}),[ce,J]=y.useState(!1),oe=async()=>{if(!p.category)return;const{error:s}=await n.from("project_budget_items").insert({project_id:a,category:p.category,description:p.description||null,budgeted_amount:Number(p.budgeted_amount)||0,actual_amount:Number(p.actual_amount)||0,currency:(l==null?void 0:l.currency)||"SEK"});if(s){N.error(s.message);return}N.success("Budgetpost tillagd"),_({category:"",description:"",budgeted_amount:"",actual_amount:""}),J(!1),g()},ue=async(s,t)=>{await n.from("project_budget_items").update({actual_amount:t}).eq("id",s),g()},me=async s=>{await n.from("project_budget_items").delete().eq("id",s),g()},[x,b]=y.useState({title:"",description:"",due_date:"",category:"general"}),[xe,W]=y.useState(!1),ge=async()=>{if(!x.title||!x.due_date)return;const{error:s}=await n.from("project_deadlines").insert({project_id:a,title:x.title,de
1scription:x.description||null,due_date:x.due_date,category:x.category});if(s){N.error(s.message);return}N.success("Deadline tillagd"),b({title:"",description:"",due_date:"",category:"general"}),W(!1),g()},he=async(s,t)=>{await n.from("project_deadlines").update({completed:t,completed_at:t?new Date().toISOString():null}).eq("id",s),g()},pe=async s=>{await n.from("project_deadlines").delete().eq("id",s),g()},K=(c==null?void 0:c.reduce((s,t)=>s+Number(t.budgeted_amount),0))||0,Y=(c==null?void 0:c.reduce((s,t)=>s+Number(t.actual_amount),0))||0,F=K>0?Math.round(Y/K*100):0,je=(h==null?void 0:h.filter(s=>s.status==="done").length)||0,Z=(h==null?void 0:h.length)||0,fe=(o==null?void 0:o.filter(s=>s.completed).length)||0,ee=(o==null?void 0:o.length)||0,ve={low:"secondary",medium:"outline",high:"default",urgent:"destructive"};return l?e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(u,{variant:"ghost",size:"icon",asChild:!0,children:e.jsx($,{to:"/admin/timeline",children:e.jsx(ke,{className:"h-5 w-5"})})}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-display font-bold",children:l.title}),e.jsx("p",{className:"text-sm text-muted-foreground",children:l.start_date&&l.end_date?`${M(new Date(l.start_date),"d MMM yyyy")} â ${M(new Date(l.end_date),"d MMM yyyy")}`:"Inga datum satta"})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(u,{variant:"outline",asChild:!0,children:e.jsx($,{to:`/admin/projects/${a}/erasmus`,children:"âï¸ Erasmus+"})}),e.jsx(u,{variant:"outline",asChild:!0,children:e.jsx($,{to:`/admin/projects/${a}/report`,children:"ð Slutrapport"})})]})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsx(k,{children:e.jsxs(S,{className:"pt-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:"Uppgifter"}),e.jsxs("p",{className:"text-2xl font-bold",children:[je,"/",Z]})]})}),e.jsx(k,{children:e.jsxs(S,{className:"pt-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:"Deadlines"}),e.jsxs("p",{className:"text-2xl font-bold",children:[fe,"/",ee]})]})}),e.jsx(k,{children:e.jsxs(S,{className:"pt-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:"Budget använd"}),e.jsxs("p",{className:"text-2xl font-bold",children:[F,"%"]})]})}),e.jsx(k,{children:e.jsxs(S,{className:"pt-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:"Godkänd budget"}),e.jsxs("p",{className:"text-2xl font-bold",children:[(l.approved_budget||0).toLocaleString()," ",l.currency]})]})})]}),e.jsxs(Ce,{defaultValue:"tasks",children:[e.jsxs(De,{className:"grid w-full grid-cols-3",children:[e.jsxs(A,{value:"tasks",children:["Uppgifter (",Z,")"]}),e.jsx(A,{value:"budget",children:"Budget"}),e.jsxs(A,{value:"deadlines",children:["Deadlines (",ee,")"]})]}),e.jsxs(P,{value:"tasks",className:"space-y-4 mt-4",children:[e.jsx("div",{className:"flex justify-end",children:e.jsxs(z,{open:ie,onOpenChange:X,children:[e.jsx(Q,{asChild:!0,children:e.jsxs(u,{size:"sm",children:[e.jsx(O,{className:"mr-2 h-4 w-4"}),"Ny uppgift"]})}),e.jsxs(U,{children:[e.jsx(V,{children:e.jsx(I,{children:"Lägg till uppgift"})}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Titel *"}),e.jsx(f,{value:m.title,onChange:s=>v(t=>({...t,title:s.target.value}))})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Beskrivning"}),e.jsx(te,{value:m.description,onChange:s=>v(t=>({...t,description:s.target.value})),rows:2})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Prioritet"}),e.jsxs(T,{value:m.priority,onValueChange:s=>v(t=>({...t,priority:s})),children:[e.jsx(q,{children:e.jsx(E,{})}),e.jsxs(B,{children:[e.jsx(i,{value:"low",children:"LÃ¥g"}),e.jsx(i,{value:"medium",children:"Medium"}),e.jsx(i,{value:"high",children:"Hög"}),e.jsx(i,{value:"urgent",children:"BrÃ¥dskande"})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Förfallodatum"}),e.jsx(f,{type:"date",value:m.due_date,onChange:s=>v(t=>({...t,due_date:s.target.value}))})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Kategori"}),e.jsxs(T,{value:m.category,onValueChange:s=>v(t=>({...t,category:s})),children:[e.jsx(q,{children:e.jsx(E,{})}),e.jsxs(B,{children:[e.jsx(i,{value:"general",children:"Allmänt"}),e.jsx(i,{value:"reporting",children:"Rapportering"}),e.jsx(i,{value:"financial",children:"Ekonomi"}),e.jsx(i,{value:"logistics",children:"Logistik"}),e.jsx(i,{value:"communication",children:"Kommunikation"}),e.jsx(i,{value:"mucf",children:"MUCF"}),e.jsx(i,{value:"erasmus",children:"Erasmus+"})]})]})]}),e.jsx(u,{onClick:ne,className:"w-full",children:"Lägg till"})]})]})]})}),["todo","in_progress","done"].map(s=>{const t=(h==null?void 0:h.filter(r=>r.status===s))||[];if(t.length===0&&s==="done")return null;const j=s==="todo"?"Att göra":s==="in_progress"?"PÃ¥gÃ¥ende":"Klart",C=s==="done"?R:s==="in_progress"?ae:H;return e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-muted-foreground mb-2 flex items-center gap-2",children:[e.jsx(C,{className:"h-4 w-4"}),j," (",t.length,")"]}),e.jsxs("div",{className:"space-y-2",children:[t.map(r=>e.jsxs("div",{className:"flex items-center gap-3 p-3 rounded-lg border bg-card hover:bg-muted/30 transition-colors",children:[e.jsxs(T,{value:r.status,onValueChange:ye=>de(r.id,ye),children:[e.jsx(q,{className:"w-10 h-8 p-0 border-0 justify-center",children:r.status==="done"?e.jsx(R,{className:"h-5 w-5 text-green-600"}):r.status==="in_progress"?e.jsx(ae,{className:"h-5 w-5 text-primary"}):e.jsx(H,{className:"h-5 w-5 text-muted-foreground"})}),e.jsxs(B,{children:[e.jsx(i,{value:"todo",children:"Att göra"}),e.jsx(i,{value:"in_progress",children:"PÃ¥gÃ¥ende"}),e.jsx(i,{value:"done",children:"Klart"})]})]}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:`text-sm font-medium ${r.status==="done"?"line-through text-muted-foreground":""}`,children:r.title}),r.description&&e.jsx("p",{className:"text-xs text-muted-foreground truncate",children:r.description})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[r.due_date&&e.jsx("span",{className:`text-xs ${re(new Date(r.due_date))&&r.status!=="done"?"text-destructive font-medium":"text-muted-foreground"}`,children:M(new Date(r.due_date),"d MMM")}),e.jsx(se,{variant:ve[r.priority],className:"text-xs",children:r.priority}),e.jsx(u,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>le(r.id),children:e.jsx(G,{className:"h-3 w-3 text-destructive"})})]})]},r.id)),t.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground pl-8",children:"Inga uppgifter"})]})]},s)})]}
1),e.jsxs(P,{value:"budget",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Totalt: ",Y.toLocaleString()," / ",K.toLocaleString()," ",l.currency||"SEK"]}),e.jsx(we,{value:F,className:`h-3 mt-1 w-64 ${F>100?"[&>div]:bg-destructive":""}`})]}),e.jsxs(z,{open:ce,onOpenChange:J,children:[e.jsx(Q,{asChild:!0,children:e.jsxs(u,{size:"sm",children:[e.jsx(O,{className:"mr-2 h-4 w-4"}),"Ny budgetpost"]})}),e.jsxs(U,{children:[e.jsx(V,{children:e.jsx(I,{children:"Lägg till budgetpost"})}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Kategori *"}),e.jsx(f,{value:p.category,onChange:s=>_(t=>({...t,category:s.target.value})),placeholder:"t.ex. Resor, Logi, Material"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Beskrivning"}),e.jsx(f,{value:p.description,onChange:s=>_(t=>({...t,description:s.target.value}))})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Budgeterat"}),e.jsx(f,{type:"number",value:p.budgeted_amount,onChange:s=>_(t=>({...t,budgeted_amount:s.target.value}))})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Faktiskt"}),e.jsx(f,{type:"number",value:p.actual_amount,onChange:s=>_(t=>({...t,actual_amount:s.target.value}))})]})]}),e.jsx(u,{onClick:oe,className:"w-full",children:"Lägg till"})]})]})]})]}),e.jsxs("div",{className:"rounded-lg border bg-card",children:[e.jsxs("div",{className:"grid grid-cols-[1fr_1fr_auto_auto_auto_auto] gap-4 p-3 border-b text-xs font-semibold text-muted-foreground",children:[e.jsx("span",{children:"Kategori"}),e.jsx("span",{children:"Beskrivning"}),e.jsx("span",{className:"text-right",children:"Budget"}),e.jsx("span",{className:"text-right",children:"Faktiskt"}),e.jsx("span",{className:"text-right",children:"Avvikelse"}),e.jsx("span",{})]}),c==null?void 0:c.map(s=>{const t=Number(s.actual_amount)-Number(s.budgeted_amount),j=Number(s.budgeted_amount)>0?Math.round(t/Number(s.budgeted_amount)*100):0,C=Math.abs(j)>20&&Number(s.actual_amount)>0;return e.jsxs("div",{className:"grid grid-cols-[1fr_1fr_auto_auto_auto_auto] gap-4 p-3 border-b last:border-0 items-center text-sm",children:[e.jsx("span",{className:"font-medium",children:s.category}),e.jsx("span",{className:"text-muted-foreground",children:s.description||"â"}),e.jsx("span",{className:"text-right",children:Number(s.budgeted_amount).toLocaleString()}),e.jsx(f,{type:"number",value:s.actual_amount,onChange:r=>ue(s.id,Number(r.target.value)),className:"w-28 h-8 text-right"}),e.jsxs("span",{className:`text-right text-xs font-medium ${C?"text-destructive":"text-muted-foreground"}`,children:[C&&e.jsx(Se,{className:"h-3 w-3 inline mr-1"}),j>0?"+":"",j,"%"]}),e.jsx(u,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>me(s.id),children:e.jsx(G,{className:"h-3 w-3 text-destructive"})})]},s.id)}),!(c!=null&&c.length)&&e.jsx("p",{className:"p-4 text-sm text-muted-foreground",children:"Inga budgetposter ännu."})]})]}),e.jsxs(P,{value:"deadlines",className:"space-y-4 mt-4",children:[e.jsx("div",{className:"flex justify-end",children:e.jsxs(z,{open:xe,onOpenChange:W,children:[e.jsx(Q,{asChild:!0,children:e.jsxs(u,{size:"sm",children:[e.jsx(O,{className:"mr-2 h-4 w-4"}),"Ny deadline"]})}),e.jsxs(U,{children:[e.jsx(V,{children:e.jsx(I,{children:"Lägg till deadline"})}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Titel *"}),e.jsx(f,{value:x.title,onChange:s=>b(t=>({...t,title:s.target.value}))})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Beskrivning"}),e.jsx(te,{value:x.description,onChange:s=>b(t=>({...t,description:s.target.value})),rows:2})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Datum *"}),e.jsx(f,{type:"date",value:x.due_date,onChange:s=>b(t=>({...t,due_date:s.target.value}))})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{children:"Kategori"}),e.jsxs(T,{value:x.category,onValueChange:s=>b(t=>({...t,category:s})),children:[e.jsx(q,{children:e.jsx(E,{})}),e.jsxs(B,{children:[e.jsx(i,{value:"general",children:"Allmänt"}),e.jsx(i,{value:"reporting",children:"Slutrapport"}),e.jsx(i,{value:"financial",children:"Ekonomisk rapport"}),e.jsx(i,{value:"mucf",children:"MUCF-inlämning"}),e.jsx(i,{value:"erasmus",children:"Erasmus+ rapport"}),e.jsx(i,{value:"audit",children:"Revision"})]})]})]})]}),e.jsx(u,{onClick:ge,className:"w-full",children:"Lägg till"})]})]})]})}),e.jsxs("div",{className:"space-y-2",children:[o==null?void 0:o.map(s=>{const t=Te(new Date(s.due_date),new Date),j=re(new Date(s.due_date))&&!s.completed;return e.jsxs("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${s.completed?"bg-muted/30 opacity-60":j?"border-destructive bg-destructive/5":"bg-card"}`,children:[e.jsx("button",{onClick:()=>he(s.id,!s.completed),className:"shrink-0",children:s.completed?e.jsx(R,{className:"h-5 w-5 text-green-600"}):e.jsx(H,{className:"h-5 w-5 text-muted-foreground hover:text-primary"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:`text-sm font-medium ${s.completed?"line-through":""}`,children:s.title}),s.description&&e.jsx("p",{className:"text-xs text-muted-foreground",children:s.description})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[e.jsx(se,{variant:"secondary",className:"text-xs",children:s.category}),e.jsxs("span",{className:`text-xs font-medium ${j?"text-destructive":"text-muted-foreground"}`,children:[M(new Date(s.due_date),"d MMM yyyy"),!s.completed&&(j?` (${Math.abs(t)}d försenad)`:t<=7?` (${t}
1d kvar)`:"")]}),e.jsx(u,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>pe(s.id),children:e.jsx(G,{className:"h-3 w-3 text-destructive"})})]})]},s.id)}),!(o!=null&&o.length)&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"Inga deadlines ännu."})]})]})]})]}):e.jsx("p",{className:"text-muted-foreground",children:"Laddar..."})}export{as 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.