1import{aI as dt,r as p,j as t,n as gt,o as _t,p as ht,q as mt,s as vt,B as xt,ca as X,cb as Z,a0 as tt,cc as et,I as g,u as L}from"./index-C-B5SaCl.js";import{T as ft,a as pt,b as st,c as at}from"./tabs-DXE-wiuM.js";const nt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],u=_=>{if(_.trim()==="")return null;const h=Number(_);return Number.isFinite(h)?h<0?"Must be 0 or more":Number.isInteger(h)?null:"Whole number only":"Enter a valid number"},f=_=>{if(_.trim()==="")return null;const h=Number(_);return Number.isFinite(h)?h<0?"Must be 0 or more":null:"Enter a valid amount"};function wt(){const{branches:_,targets:h,updateTarget:$}=dt(),w=new Date,[j,rt]=p.useState(w.getFullYear()),[O,k]=p.useState(!1),[m,N]=p.useState({}),[A,lt]=p.useState(null),[V,it]=p.useState(null),B=(s,a)=>`sales::${s}::${a}`,R=(s,a)=>`lettings::${s}::${a}`,b=(s,a)=>h.find(n=>n.branch_id===s&&n.month===a&&n.year===j),Y=(s,a)=>{const n=B(s,a);if(m[n])return m[n];const e=b(s,a);return{gross_sales:e!=null&&e.gross_sales_target?Str
1ing(e.gross_sales_target):"",ft_rate:e!=null&&e.ft_rate_target?String(e.ft_rate_target):"12",net_sales:e!=null&&e.net_sales_target?String(e.net_sales_target):"",completions:e!=null&&e.completions_target?String(e.completions_target):"",instructions_count:e!=null&&e.instructions_count_target?String(e.instructions_count_target):"",instructions_value:e!=null&&e.instructions_value_target?String(e.instructions_value_target):"",auction_instructions:e!=null&&e.auction_instructions_target?String(e.auction_instructions_target):""}},D=(s,a)=>{const n=R(s,a);if(m[n])return m[n];const e=b(s,a);return{new_lets:e!=null&&e.new_lets_target?String(e.new_lets_target):"",new_lets_value:e!=null&&e.new_lets_value_target?String(e.new_lets_value_target):"",total_managed:e!=null&&e.total_managed_target?String(e.total_managed_target):""}},v=(s,a,n,e)=>{const o=B(s,a),l={...Y(s,a),[n]:e};if(n==="gross_sales"||n==="ft_rate"){const c=parseFloat(l.gross_sales)||0,r=parseFloat(l.ft_rate)||0;l.net_sales=String(Math.round(c*(1-r/100)))}N(c=>({...c,[o]:l}))},S=(s,a,n,e)=>{const o=R(s,a),i=D(s,a);N(l=>({...l,[o]:{...i,[n]:e}}))},ot=Object.keys(m).length>0,J=Object.entries(m).some(([s,a])=>{if(s.startsWith("sales::")){const e=a;return u(e.instructions_count)!==null||f(e.instructions_value)!==null||u(e.auction_instructions)!==null}const n=a;return u(n.new_lets)!==null||f(n.new_lets_value)!==null||u(n.total_managed)!==null}),ct=async()=>{if(J){L.error("Fix the highlighted errors before saving");return}k(!0);try{let s=0;for(const[a,n]of Object.entries(m)){const e=a.split("::"),o=e[0],i=e[1],l=e[2],c=Number(l),r=b(i,c);if(o==="lettings"){const x=n;if(u(x.new_lets)||f(x.new_lets_value)||u(x.total_managed))continue;const M=parseFloat(x.new_lets)||0,E=parseFloat(x.new_lets_value)||0,T=parseFloat(x.total_managed)||0,z=Number.isFinite(M)&&M>=0?Math.floor(M):0,Q=Number.isFinite(E)&&E>=0?E:0,U=Number.isFinite(T)&&T>=0?Math.floor(T):0;if(z===0&&Q===0&&U===0&&!r)continue;await $({id:(r==null?void 0:r.id)??"",branch_id:i,month:c,year:j,target_value:(r==null?void 0:r.target_value)??0,gross_sales_target:(r==null?void 0:r.gross_sales_target)??0,completions_target:(r==null?void 0:r.completions_target)??0,ft_rate_target:(r==null?void 0:r.ft_rate_target)??12,net_sales_target:(r==null?void 0:r.net_sales_target)??0,instructions_count_target:(r==null?void 0:r.instructions_count_target)??0,instructions_value_target:(r==null?void 0:r.instructions_value_target)??0,auction_instructions_target:(r==null?void 0:r.auction_instructions_target)??0,new_lets_target:z,new_lets_value_target:Q,total_managed_target:U}),s++;continue}const d=n,F=parseFloat(d.gross_sales)||0,ut=parseFloat(d.ft_rate)||12,K=parseFloat(d.net_sales)||0,W=parseFloat(d.completions)||0,y=parseFloat(d.instructions_count)||0,C=parseFloat(d.instructions_value)||0,I=parseFloat(d.auction_instructions)||0;if(u(d.instructions_count)||f(d.instructions_value)||u(d.auction_instructions))continue;const q=Number.isFinite(y)&&y>=0?Math.floor(y):0,H=Number.isFinite(C)&&C>=0?C:0,P=Number.isFinite(I)&&I>=0?Math.floor(I):0;F===0&&W===0&&K===0&&q===0&&H===0&&P===0||(await $({id:(r==null?void 0:r.id)??"",branch_id:i,month:c,year:j,target_value:F,gross_sales_target:F,completions_target:W,ft_rate_target:ut,net_sales_target:K,instructions_count_target:q,instructions_value_target:H,auction_instructions_target:P,new_lets_target:(r==null?void 0:r.new_lets_target)??0,new_lets_value_target:(r==null?void 0:r.new_lets_value_target)??0,total_managed_target:(r==null?void 0:r.total_managed_target)??0}),s++)}N({}),L.success(`Saved ${s} target(s)`)}catch(s){L.error(s.message||"Failed to save")}k(!1)},G=Array.from({length:12},(s,a)=>a+1);return t.jsxs("div",{className:"space-y-6",children:[t.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[t.jsxs("div",{children:[t.jsx("h1",{className:"font-bold text-3xl text-secondary-foreground",children:"SALES OFFICE TARGETS"}),t.jsx("p",{className:"text-sm text-muted-foreground",children:"Set monthly targets per branch for current and future months"})]}),t.jsxs("div",{className:"flex gap-2",children:[t.jsxs(gt,{value:String(j),onValueChange:s=>{rt(Number(s)),N({})},children:[t.jsx(_t,{className:"w-24",children:t.jsx(ht,{})}),t.jsx(mt,{children:[w.getFullYear(),w.getFullYear()+1].map(s=>t.jsx(vt,{value:String(s),children:s},s))})]}),t.jsx(xt,{onClick:ct,disabled:O||!ot||J,children:O?"Savingâ¦":"Save All"})]})]}),t.jsxs(ft,{defaultValue:"sales",className:"w-full",children:[t.jsxs(pt,{children:[t.jsx(st,{value:"sales",children:"Sales"}),t.jsx(st,{value:"lettings",children:"Lettings"})]}),t.jsx(at,{value:"sales",className:"space-y-6 mt-4",children:_.filter(s=>s.type!=="lettings"&&!s.is_test).map(s=>t.jsxs(X,{open:A===s.id,onOpenChange:a=>lt(a?s.id:null),className:"kpi-card",children:[t.jsxs(Z,{className:"flex w-full items-center justify-between text-left",children:[t.jsx("span",{className:"font-semibold",children:s.name}),t.jsx(tt,{className:`h-4 w-4 text-muted-foreground transition-transform ${A===s.id?"rotate-180":""}`})]}),t.jsx(et,{className:"mt-3 overflow-x-auto",children:t.jsxs("table",{className:"data-table",children:[t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"Month"}),t.jsx("th",{className:"text-right",children:"Gross Sales (£)"}),t.jsx("th",{className:"text-right",children:"FT Rate (%)"}),t.jsx("th",{className:"text-right",children:"Net Sales (£)"}),t.jsx("th",{className:"text-right",children:"Completions (£)"}),t.jsx("th",{className:"text-right",children:"Instructions (#)"}),t.jsx("th",{className:"text-right",children:"Instructions (£)"}
1),t.jsx("th",{className:"text-right",children:"Auction Instructions (#)"})]})}),t.jsx("tbody",{children:G.map(a=>{const n=Y(s.id,a),e=u(n.instructions_count),o=f(n.instructions_value),i=u(n.auction_instructions);return t.jsxs("tr",{children:[t.jsx("td",{className:"font-medium",children:nt[a-1]}),t.jsx("td",{className:"text-right",children:t.jsx(g,{type:"number",className:"w-32 ml-auto text-right h-8",value:n.gross_sales,onChange:l=>v(s.id,a,"gross_sales",l.target.value),placeholder:"0"})}),t.jsx("td",{className:"text-right",children:t.jsx(g,{type:"number",className:"w-24 ml-auto text-right h-8",value:n.ft_rate,onChange:l=>v(s.id,a,"ft_rate",l.target.value),placeholder:"12"})}),t.jsx("td",{className:"text-right",children:t.jsx(g,{type:"number",className:"w-32 ml-auto text-right h-8",value:n.net_sales,onChange:l=>v(s.id,a,"net_sales",l.target.value),placeholder:"0"})}),t.jsx("td",{className:"text-right",children:t.jsx(g,{type:"number",className:"w-32 ml-auto text-right h-8",value:n.completions,onChange:l=>v(s.id,a,"completions",l.target.value),placeholder:"0"})}),t.jsxs("td",{className:"text-right",children:[t.jsx(g,{type:"number",className:`w-24 ml-auto text-right h-8 ${e?"border-destructive focus-visible:ring-destructive":""}`,value:n.instructions_count,onChange:l=>v(s.id,a,"instructions_count",l.target.value),placeholder:"0","aria-invalid":!!e}),e&&t.jsx("p",{className:"mt-1 text-xs text-destructive",children:e})]}),t.jsxs("td",{className:"text-right",children:[t.jsx(g,{type:"number",className:`w-32 ml-auto text-right h-8 ${o?"border-destructive focus-visible:ring-destructive":""}`,value:n.instructions_value,onChange:l=>v(s.id,a,"instructions_value",l.target.value),placeholder:"0","aria-invalid":!!o}),o&&t.jsx("p",{className:"mt-1 text-xs text-destructive",children:o})]}),t.jsxs("td",{className:"text-right",children:[t.jsx(g,{type:"number",className:`w-24 ml-auto text-right h-8 ${i?"border-destructive focus-visible:ring-destructive":""}`,value:n.auction_instructions,onChange:l=>v(s.id,a,"auction_instructions",l.target.value),placeholder:"0","aria-invalid":!!i}),i&&t.jsx("p",{className:"mt-1 text-xs text-destructive",children:i})]})]},a)})})]})})]},s.id))}),t.jsx(at,{value:"lettings",className:"space-y-6 mt-4",children:(()=>{const s=_.filter(a=>a.type==="lettings");return s.length===0?t.jsx("div",{className:"kpi-card text-sm text-muted-foreground",children:"No Lettings Office configured â add one under Admin â Branches."}):s.map(a=>t.jsxs(X,{open:V===a.id,onOpenChange:n=>it(n?a.id:null),className:"kpi-card",children:[t.jsxs(Z,{className:"flex w-full items-center justify-between text-left",children:[t.jsx("span",{className:"font-semibold",children:a.name}),t.jsx(tt,{className:`h-4 w-4 text-muted-foreground transition-transform ${V===a.id?"rotate-180":""}`})]}),t.jsx(et,{className:"mt-3 overflow-x-auto",children:t.jsxs("table",{className:"data-table",children:[t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"Month"}),t.jsx("th",{className:"text-right",children:"Move-ins (#)"}),t.jsx("th",{className:"text-right",children:"Move-ins (£)"}),t.jsx("th",{className:"text-right",children:"Total Managed Properties (#)"})]})}),t.jsx("tbody",{children:G.map(n=>{const e=D(a.id,n),o=u(e.new_lets),i=f(e.new_lets_value),l=u(e.total_managed);return t.jsxs("tr",{children:[t.jsx("td",{className:"font-medium",children:nt[n-1]}),t.jsxs("td",{className:"text-right",children:[t.jsx(g,{type:"number",className:`w-28 ml-auto text-right h-8 ${o?"border-destructive focus-visible:ring-destructive":""}`,value:e.new_lets,onChange:c=>S(a.id,n,"new_lets",c.target.value),placeholder:"0","aria-invalid":!!o}),o&&t.jsx("p",{className:"mt-1 text-xs text-destructive",children:o})]}),t.jsxs("td",{className:"text-right",children:[t.jsx(g,{type:"number",className:`w-32 ml-auto text-right h-8 ${i?"border-destructive focus-visible:ring-destructive":""}`,value:e.new_lets_value,onChange:c=>S(a.id,n,"new_lets_value",c.target.value),placeholder:"0","aria-invalid":!!i}),i&&t.jsx("p",{className:"mt-1 text-xs text-destructive",children:i})]}),t.jsxs("td",{className:"text-right",children:[t.jsx(g,{type:"number",className:`w-28 ml-auto text-right h-8 ${l?"border-destructive focus-visible:ring-destructive":""}`,value:e.total_managed,onChange:c=>S(a.id,n,"total_managed",c.target.value),placeholder:"0","aria-invalid":!!l}),l&&t.jsx("p",{className:"mt-1 text-xs text-destructive",children:l})]})]},n)})})]})})]},a.id))})()})]})]})}export{wt 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.