1"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[6645],{31555(e,s,t){t.d(s,{E:()=>d});var a=t(89379),r=t(53986),l=t(99766),i=t(70579);const c=["className"];function d(e){let{className:s}=e,t=(0,r.A)(e,c);return(0,i.jsx)("div",(0,a.A)({className:(0,l.cn)("animate-pulse rounded-md bg-primary/10",s)},t))}},56645(e,s,t){t.r(s),t.d(s,{default:()=>S});var a=t(65043),r=t(56263),l=t(91140),i=t(5949),c=t(13390),d=t(31555),n=t(45685),o=t(27033),m=t(37719),x=t(85692),u=t(19233),h=t(38326),p=t(86376),v=t(73062),g=t(55731),b=t(81990),N=t(50516),f=t(20254),j=t(51419),y=t(44919),k=t(44285),w=t(7118),A=t(7816),C=t(70579);const _="https://www.servisdata.com";function R(e){if(!e&&0!==e)return"-";return"".concat({TRY:"\u20ba",USD:"$",EUR:"\u20ac"}[arguments.length>1&&void 0!==arguments[1]?arguments[1]:"TRY"]||"").concat(Number(e).toLocaleString("tr-TR",{minimumFractionDigits:2,maximumFractionDigits:2}))}function S(e){var s;let{business:t}=e;const[S,D]=(0,a.useState)(null),[Z,E]=(0,a.useState)(!0),[W,T]=(0,a.useState)(!1),[U,Y]=(0,a.useState)(null),z=(0,n.Zp)(),B=async()=>{if(null!==t&&void 0!==t&&t.id)try{const e=await r.A.get("".concat(_,"/api/trade/dashboard?business_id=").concat(t.id));D(e.data)}catch(e){console.error("Dashboard fetch error:",e)}finally{E(!1)}};(0,a.useEffect)(()=>{B(),r.A.get("".concat(_,"/api/notifications/summary")).then(e=>Y(e.data)).catch(()=>{})},[null===t||void 0===t?void 0:t.id]);if(Z)return(0,C.jsx)("div",{className:"space-y-6","data-testid":"trade-dashboard-loading",children:(0,C.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[1,2,3,4].map(e=>(0,C.jsx)(l.Zp,{className:"bg-[var(--sd-bg-tertiary)] sd-border/60",children:(0,C.jsxs)(l.Wu,{className:"pt-5",children:[(0,C.jsx)(d.E,{className:"h-4 w-24 bg-[var(--sd-bg-tertiary)] mb-3"}),(0,C.jsx)(d.E,{className:"h-8 w-32 bg-[var(--sd-bg-tertiary)]"})]})},e))})});const F=(null===S||void 0===S?void 0:S.products)||{},G=(null===S||void 0===S?void 0:S.customers)||{},L=(null===S||void 0===S?void 0:S.shipments)||{},$=(null===S||void 0===S?void 0:S.exchange_rates)||{},K=e=>{let{title:s,value:t,subtitle:a,icon:r,iconColor:i,onClick:c}=e;return(0,C.jsx)(l.Zp,{className:"bg-[var(--sd-bg-card)] sd-border/60 hover:sd-border transition-all duration-200 ".concat(c?"cursor-pointer":""),onClick:c,"data-testid":"kpi-".concat(s.toLowerCase().replace(/\s/g,"-")),children:(0,C.jsx)(l.Wu,{className:"pt-5 pb-4",children:(0,C.jsxs)("div",{className:"flex items-start justify-between",children:[(0,C.jsxs)("div",{className:"space-y-1",children:[(0,C.jsx)("p",{className:"text-xs font-medium sd-text-muted uppercase tracking-wider",children:s}),(0,C.jsx)("p",{className:"text-2xl font-bold sd-text",children:t}),a&&(0,C.jsx)("p",{className:"text-[11px] sd-text-muted",children:a})]}),(0,C.jsx)("div",{className:"h-10 w-10 rounded-xl ".concat(i||"bg-sky-500/10"," flex items-center justify-center"),children:(0,C.jsx)(r,{className:"h-5 w-5 ".concat(null!==i&&void 0!==i&&i.includes("text-")?i.replace("bg-","text-").replace("/10",""):"text-sky-400")})})]})})})};return(0,C.jsxs)("div",{className:"space-y-6","data-testid":"trade-dashboard",children:[(0,C.jsx)("div",{className:"flex items-center justify-between",children:(0,C.jsxs)("div",{children:[(0,C.jsx)("h1",{className:"text-xl font-bold sd-text",children:"G\xf6sterge Paneli"}),(0,C.jsx)("p",{className:"text-sm sd-text-muted mt-0.5",children:"\u0130thalat & toptan ticaret \xf6zeti"})]})}),(0,C.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[(0,C.jsx)(K,{title:"Toplam \xdcr\xfcn",value:F.total||0,subtitle:"".concat(F.low_stock||0," d\xfc\u015f\xfck stok"),icon:b.A,iconColor:"bg-emerald-500/10 text-emerald-400",onClick:()=>z("/trade/products")}),(0,C.jsx)(K,{title:"Stok De\u011feri",value:R(F.stock_value_try),subtitle:"Maliyet: ".concat(R(F.stock_cost_usd,"USD")),icon:o.A,iconColor:"bg-sky-500/10 text-sky-400"}),(0,C.jsx)(K,{title:"M\xfc\u015fteri Alacaklar\u0131",value:R(G.receivable_try),subtitle:"".concat(G.count||0," m\xfc\u015fteri"),icon:w.A,iconColor:"bg-violet-500/10 text-violet-400",onClick:()=>z("/trade/customers")}),(0,C.jsx)(K,{title:"Yoldaki Sevkiyat",value:L.in_transit||0,subtitle:"aktif sevkiyat",icon:f.A,iconColor:"bg-
1amber-500/10 text-amber-600",onClick:()=>z("/trade/imports")})]}),U&&U.total_unread>0&&(0,C.jsx)(l.Zp,{className:"bg-[var(--sd-bg-card)] sd-border/60 cursor-pointer hover:shadow-md transition-shadow",onClick:()=>z("/notifications"),"data-testid":"trade-notifications-widget",children:(0,C.jsx)(l.Wu,{className:"p-4",children:(0,C.jsxs)("div",{className:"flex items-center gap-4",children:[(0,C.jsx)("div",{className:"h-10 w-10 rounded-xl bg-amber-500/10 flex items-center justify-center",children:(0,C.jsx)(u.A,{className:"h-5 w-5 text-amber-500"})}),(0,C.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,C.jsxs)("div",{className:"flex items-center gap-2",children:[(0,C.jsx)("span",{className:"sd-text font-semibold text-sm",children:"Ak\u0131ll\u0131 Bildirimler"}),(0,C.jsxs)(i.E,{variant:"secondary",className:"text-[10px]",children:[U.total_unread," okunmam\u0131\u015f"]}),U.total_critical>0&&(0,C.jsxs)(i.E,{variant:"destructive",className:"text-[10px]",children:[U.total_critical," kritik"]})]}),(0,C.jsx)("div",{className:"flex items-center gap-3 mt-1 flex-wrap",children:null===(s=U.by_type)||void 0===s?void 0:s.slice(0,3).map(e=>{const s={stock_alert:b.A,payment_overdue:p.A,shipment_delayed:k.A,shipment_arriving:k.A}[e.type]||u.A;return(0,C.jsxs)("span",{className:"flex items-center gap-1 sd-text-muted text-xs",children:[(0,C.jsx)(s,{className:"h-3.5 w-3.5"})," ",e.label,": ",(0,C.jsx)("strong",{className:"sd-text",children:e.count})]},e.type)})})]}),(0,C.jsx)(h.A,{className:"h-5 w-5 sd-text-muted flex-shrink-0"})]})})}),(0,C.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[(0,C.jsxs)(l.Zp,{className:"bg-[var(--sd-bg-card)] sd-border/60 lg:col-span-1","data-testid":"exchange-rates-card",children:[(0,C.jsx)(l.aR,{className:"pb-3",children:(0,C.jsxs)("div",{className:"flex items-center justify-between",children:[(0,C.jsxs)(l.ZB,{className:"text-sm font-semibold sd-text flex items-center gap-2",children:[(0,C.jsx)(g.A,{className:"h-4 w-4 text-sky-400"}),"D\xf6viz Kurlar\u0131"]}),(0,C.jsxs)(c.$,{variant:"ghost",size:"sm",className:"h-7 text-xs sd-text-muted hover:sd-text hover:bg-[var(--sd-bg-hover)]",onClick:async()=>{T(!0);try{await r.A.post("".concat(_,"/api/trade/exchange-rates/fetch-live"),{business_id:null===t||void 0===t?void 0:t.id}),A.o.success("D\xf6viz kurlar\u0131 g\xfcncellendi"),B()}catch(e){A.o.error("Kur g\xfcncellenemedi, manuel giri\u015f yapabilirsiniz")}finally{T(!1)}},disabled:W,"data-testid":"refresh-rates-btn",children:[(0,C.jsx)(N.A,{className:"h-3 w-3 mr-1 ".concat(W?"animate-spin":"")}),"G\xfcncelle"]})]})}),(0,C.jsx)(l.Wu,{className:"space-y-3",children:["USD/TRY","EUR/TRY"].map(e=>{const s=$[e],t=e.startsWith("USD")?"$":"\u20ac";return(0,C.jsxs)("div",{className:"flex items-center justify-between p-3 bg-[var(--sd-bg-tertiary)] rounded-lg border sd-border/60",children:[(0,C.jsxs)("div",{className:"flex items-center gap-2",children:[(0,C.jsx)("div",{className:"h-8 w-8 rounded-lg ".concat(e.startsWith("USD")?"bg-emerald-500/10":"bg-sky-500/10"," flex items-center justify-center"),children:(0,C.jsx)("span",{className:"text-sm font-bold ".concat(e.startsWith("USD")?"text-emerald-400":"text-sky-400"),children:t})}),(0,C.jsxs)("div",{children:[(0,C.jsx)("p",{className:"text-xs font-medium sd-text",children:e}),(0,C.jsx)("p",{className:"text-[10px] sd-text-muted",children:"manual"===(null===s||void 0===s?void 0:s.source)?"Manuel":(null===s||void 0===s?void 0:s.source)||"-"})]})]}),(0,C.jsx)("span",{className:"text-lg font-bold sd-text font-mono",children:null!==s&&void 0!==s&&s.rate?Number(s.rate).toFixed(4):"\u2014"})]},e)})})]}),(0,C.jsxs)(l.Zp,{className:"bg-[var(--sd-bg-card)] sd-border/60 lg:col-span-2","data-testid":"quick-actions-card",children:[(0,C.jsx)(l.aR,{className:"pb-3",children:(0,C.jsxs)(l.ZB,{className:"text-sm font-semibold sd-text flex items-center gap-2",children:[(0,C.jsx)(m.A,{className:"h-4 w-4 text-amber-600"}),"H\u0131zl\u0131 \u0130\u015flemler"]})}),(0,C.jsxs)(l.Wu,{children:[(0,C.jsx)("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-3",children:[{name:"Yeni \xdcr\xfcn",icon:b.A,color:"from-emerald-600 to-emerald-700",path:"/trade/products?action=new"},{name:"Yeni Sat\u0131\u015f",icon:j.A,color:"from-violet-600 to-violet-700",path:"/trade/sales?action=new"}
1,{name:"Yeni Sevkiyat",icon:f.A,color:"from-amber-600 to-amber-700",path:"/trade/imports?action=new"},{name:"Kur G\xfcncelle",icon:y.A,color:"from-sky-600 to-sky-700",path:"/trade/exchange-rates"},{name:"Fiyat Listesi",icon:v.A,color:"from-rose-600 to-rose-700",path:"/trade/price-lists"},{name:"Excel Import",icon:g.A,color:"from-teal-600 to-teal-700",path:"/trade/excel-import"}].map(e=>(0,C.jsxs)("button",{onClick:()=>z(e.path),className:"flex items-center gap-2.5 p-3 rounded-xl bg-gradient-to-br ".concat(e.color," text-white hover:opacity-90 transition-opacity duration-150"),"data-testid":"qa-".concat(e.name.toLowerCase().replace(/\s/g,"-")),children:[(0,C.jsx)(e.icon,{className:"h-4 w-4"}),(0,C.jsx)("span",{className:"text-xs font-medium",children:e.name})]},e.name))}),F.low_stock>0&&(0,C.jsx)("div",{className:"mt-4 p-3 bg-amber-50 border border-amber-200 rounded-lg",children:(0,C.jsxs)("div",{className:"flex items-center gap-2",children:[(0,C.jsx)(m.A,{className:"h-4 w-4 text-amber-600"}),(0,C.jsxs)("span",{className:"text-xs text-amber-700 font-medium",children:[F.low_stock," \xfcr\xfcnde stok kritik seviyede"]}),(0,C.jsxs)(c.$,{variant:"ghost",size:"sm",className:"ml-auto h-6 text-[10px] text-amber-600 hover:text-amber-700",onClick:()=>z("/trade/products?filter=low-stock"),children:["G\xf6r\xfcnt\xfcle ",(0,C.jsx)(x.A,{className:"h-3 w-3 ml-1"})]})]})})]})]})]})]})}},91140(e,s,t){t.d(s,{BT:()=>g,Wu:()=>b,ZB:()=>v,Zp:()=>h,aR:()=>p});var a=t(89379),r=t(53986),l=t(65043),i=t(99766),c=t(70579);const d=["className"],n=["className"],o=["className"],m=["className"],x=["className"],u=["className"],h=l.forwardRef((e,s)=>{let{className:t}=e,l=(0,r.A)(e,d);return(0,c.jsx)("div",(0,a.A)({ref:s,className:(0,i.cn)("rounded-xl border bg-card text-card-foreground shadow",t)},l))});h.displayName="Card";const p=l.forwardRef((e,s)=>{let{className:t}=e,l=(0,r.A)(e,n);return(0,c.jsx)("div",(0,a.A)({ref:s,className:(0,i.cn)("flex flex-col space-y-1.5 p-6",t)},l))});p.displayName="CardHeader";const v=l.forwardRef((e,s)=>{let{className:t}=e,l=(0,r.A)(e,o);return(0,c.jsx)("div",(0,a.A)({ref:s,className:(0,i.cn)("font-semibold leading-none tracking-tight",t)},l))});v.displayName="CardTitle";const g=l.forwardRef((e,s)=>{let{className:t}=e,l=(0,r.A)(e,m);return(0,c.jsx)("div",(0,a.A)({ref:s,className:(0,i.cn)("text-sm text-muted-foreground",t)},l))});g.displayName="CardDescription";const b=l.forwardRef((e,s)=>{let{className:t}=e,l=(0,r.A)(e,x);return(0,c.jsx)("div",(0,a.A)({ref:s,className:(0,i.cn)("p-6 pt-0",t)},l))});b.displayName="CardContent";l.forwardRef((e,s)=>{let{className:t}=e,l=(0,r.A)(e,u);return(0,c.jsx)("div",(0,a.A)({ref:s,className:(0,i.cn)("flex items-center p-6 pt-0",t)},l))}).displayName="CardFooter"}}]);
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.