PageSourceSearch

https://smartacc.ai/assets/SalesByItemReport-DF6yBZek.js

js smartacc.ai collected 2026-10-05 13:53:23 UTC 11,225 bytes, 1 lines download raw bytes

1import{r as c,s as f,j as e,C as L,d as B,e as ae,a as H,B as g,n as q,w as p,t as oe}from"./index-DxOFb5q5.js";import{M as re}from"./MainLayout-DtU_Llqf.js";import{I as ie}from"./input-CVbPUMku.js";import{T as ne,a as le,b as v,c as u,d as ce,e as r,f as me}from"./table-ME1uwNKv.js";import{P as Q,a as W,b as z}from"./popover-BSng_8EV.js";import{C as A}from"./calendar-BtHlTnMz.js";import{S as de}from"./searchable-select-Dys54PhJ.js";import{u as ue}from"./useFormatCurrency-BsdhlCf0.js";import{utils as $,writeFile as he}from"./xlsx-B6sNpj_1.js";import{F as xe}from"./filter-DliOV9sc.js";import{C as O}from"./calendar-BHhiwWrx.js";import{R as pe}from"./refresh-cw-svEfoL48.js";import{S as _e}from"./search-G0uOToOP.js";import{D as fe}from"./download-11o5Rlif.js";import{P as je}from"./printer-DbHTt8Fg.js";import{s as ye}from"./startOfMonth-cMg7qZtQ.js";import{f as j}from"./format-C8WnnBHU.js";import"./scroll-area-DnopRVtP.js";import"./index-BcIIhdSh.js";import"./index-BdQq_4o_.js";import"./index-Cqq0Q2R_.js";import"./command-BFn5ANfh.js";import"./index-Dcw69aED.js";import"./Combination-DCNPHtSM.js";import"./dialog-DgwIDP3O.js";import"./menu-QlHo9vH9.js";import"./chevron-right-D6QjocKi.js";import"./chevron-left-RCei6Rf9.js";import"./shield-check-1hkJMTyG.js";import"./database-bp7Ljsd-.js";import"./package-D2mOB_oX.js";import"./ruler-BrO1m_xd.js";import"./store-CwRfK_Md.js";import"./building-2-r7iwwscV.js";import"./landmark-C-TTWCoH.js";import"./file-text-COWAn2T6.js";import"./receipt-BQ0dEskx.js";import"./file-spreadsheet-CNeCmKU4.js";import"./chart-column-CLiCXUYS.js";import"./activity-CNN2ocS3.js";import"./wallet-DGGNcBKF.js";import"./eye-Dlshx1uz.js";import"./trending-up-B0aavs3A.js";import"./settings-HOD_H3QC.js";import"./users-BVKd5H-E.js";import"./history-nIzksNKw.js";import"./chevron-down-CWi4njHw.js";import"./dropdown-menu-CjAirWC6.js";import"./tabs-CzMufvm2.js";import"./check-DzIagfLA.js";import"./badge-CVZMAyjp.js";import"./bell-CD0XGSIW.js";import"./trash-2-BoOxGfMY.js";import"./external-link-tmSrGh37.js";import"./textarea-Cmvr5DnJ.js";import"./label-7GxXTAVW.js";import"./select-D5UGUo-D.js";import"./index-CoAPzOtZ.js";
1import"./separator-DEBCOVBC.js";import"./plus-uyLhkU53.js";import"./message-square-DgTO1qZn.js";import"./ar-CbFYuq6n.js";import"./send-Cg1_2Arg.js";import"./circle-check-big-Qz15irJg.js";import"./circle-alert-B2fp0-Vk.js";import"./useQuery-M3eWlJAa.js";import"./globe-DnaTgzo2.js";import"./shopping-cart-z_8fiYSq.js";import"./index-BdK6m1Wq.js";import"./zap-DG0OwecT.js";import"./AnnouncementCard-C0NUbBSm.js";import"./megaphone-D4JgWOFE.js";import"./addDays-DXAovk-0.js";import"./endOfMonth-CDRRNMCE.js";import"./addMonths-CvfMHQ3l.js";import"./addYears-BpfI7AmY.js";import"./useCurrency-CHfOSI-0.js";function zt(){const m=ue(),[b,V]=c.useState(ye(new Date)),[w,G]=c.useState(new Date),[y,J]=c.useState("all"),[K,U]=c.useState([]),[C,X]=c.useState(""),[M,D]=c.useState(!1),[P,Y]=c.useState([]);c.useEffect(()=>{(async()=>{const{data:t}=await f.from("warehouses").select("id, code, name").order("name");U([{value:"all",label:"كل المستودعات"},...(t||[]).map(o=>({value:o.id,label:`${o.code} - ${o.name}`}))])})()},[]);const R=async()=>{D(!0);try{const t=j(b,"yyyy-MM-dd"),o=j(w,"yyyy-MM-dd");let i=f.from("sales_invoices").select("id, status, warehouse_id, date").gte("date",t).lte("date",o);y!=="all"&&(i=i.eq("warehouse_id",y));const{data:n,error:N}=await i;if(N)throw N;const T=(n||[]).filter(a=>a.status!=="cancelled").map(a=>a.id),ee=(n||[]).filter(a=>a.status==="cancelled").map(a=>a.id),k=new Map,E=(a,d,s)=>{let l=k.get(a);return l||(l={item_id:a,item_code:d,item_name:s,gross_qty:0,gross_amount:0,return_qty:0,return_amount:0,cancel_qty:0,cancel_amount:0,cost:0},k.set(a,l)),l},F=(a,d=500)=>{const s=[];for(let l=0;l<a.length;l+=d)s.push(a.slice(l,l+d));return s};for(const a of F(T)){if(!a.length)continue;const{data:d}=await f.from("sales_invoice_lines").select("item_id, item_code, item_name, quantity, line_total, unit_cost").in("invoice_id",a);(d||[]).forEach(s=>{const l=s.item_id||`code:${s.item_code}`,x=E(l,s.item_code,s.item_name);x.gross_qty+=Number(s.quantity)||0,x.gross_amount+=Number(s.line_total)||0,x.cost+=(Number(s.quantity)||0)*(Number(s.unit_cost)||0)})}for(const a of F(ee)){if(!a.length)continue;const{data:d}=await f.from("sales_invoice_lines").select("item_id, item_code, item_name, quantity, line_total").in("invoice_id",a);(d||[]).forEach(s=>{const l=s.item_id||`code:${s.item_code}`,x=E(l,s.item_code,s.item_name);x.cancel_qty+=Number(s.quantity)||0,x.cancel_amount+=Number(s.line_total)||0})}let I=f.from("sales_returns").select("id, warehouse_id, date, status").gte("date",t).lte("date",o).neq("status","cancelled");y!=="all"&&(I=I.eq("warehouse_id",y));const{data:te}=await I,se=(te||[]).map(a=>a.id);for(const a of F(se)){if(!a.length)continue;const{data:d}=await f.from("sales_return_lines").select("item_id, item_code, item_name, quantity, line_total").in("return_id",a);(d||[]).forEach(s=>{const l=s.item_id||`code:${s.item_code}`,x=E(l,s.item_code,s.item_name);x.return_qty+=Number(s.quantity)||0,x.return_amount+=Number(s.line_total)||0})}Y(Array.from(k.values()))}catch(t){oe({title:"خطأ في تحميل التقرير",description:t.message,variant:"destructive"})}finally{D(!1)}};c.useEffect(()=>{R()},[]);const S=c.useMemo(()=>{const t=P.map(i=>{const n=i.gross_qty-i.return_qty,N=i.gross_amount-i.return_amount,T=N-i.cost;return{...i,net_qty:n,net_amount:N,profit:T}}),o=t.reduce((i,n)=>i+n.net_amount,0);return t.map(i=>({...i,net_share:o>0?i.net_amount/o*100:0}))},[P]),_=c.useMemo(()=>{const t=C.trim().toLowerCase();return t?S.filter(o=>o.item_name.toLowerCase().includes(t)||o.item_code.toLowerCase().includes(t)):S},[S,C]),h=c.useMemo(()=>_.reduce((t,o)=>(t.net_qty+=o.net_qty,t.net_amount+=o.net_amount,t.cost+=o.cost,t.return_qty+=o.return_qty,t.return_amount+=o.return_amount,t.cancel_qty+=o.cancel_qty,t.cancel_amount+=o.cancel_amount,t.profit+=o.profit,t),{net_qty:0,net_amount:0,cost:0,return_qty:0,return_amount:0,cancel_qty:0,cancel_amount:0,profit:0}),[_]),Z=()=>{const t=_.map(n=>({"كود الصنف":n.item_code,المنتج:n.item_name,"صافي المبيعات %":Number(n.net_share.toFixed(2)),"صافي الكمية":n.net_qty,"صافي المبيعات":n.net_amount,التكلفة:n.cost,"مبلغ الإرجاع":n.return_amount,"كمية المرتجع":n.return_qty,"مبلغ الإلغاء":n.cancel_amount,"كمية الإلغاء":n.cancel_qty,الربح:n.profit})),o=$.json_to_sheet(t),i=$.book_new();$.book_append_sheet(i,o,"مبيعات الأصناف"),he(i,`sales-by-item-${j(b,"yyyyMMdd")}-${j(w,"yyyyMMdd")}.xlsx`)};return e.jsx(re,{title:"تقرير مبيعات الأصناف",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs(L,{children:[e.jsx(B,{className:"pb-3",children:e.jsxs(ae,{className:"flex items-center gap-2 text-lg",children:[e.jsx(xe,{className:"h-4 w-4"})," الفلاتر"]})}),e.jsx(H,{children:e.jsxs("div",{className:"grid gap-3 md:grid-cols-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs text-muted-foreground",children:"من تاريخ"}),e.jsxs(Q,{children:[e.jsx(W,{asChild:!0,children:e.jsxs(g,{variant:"outline",className:q("w-full justify-start text-right"),children:[e.jsx(O,{className:"ml-2 h-4 w-4"}),j(b,"dd/MM/yyyy")]})}),e.jsx(z,{className:"w-auto p-0",children:e.jsx(A,{mode:"single",selected:b,onSelect:t=>t&&V(t)})})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs text-muted-foreground",children:"إلى تاريخ"}),e.jsxs(Q,{children:[e.jsx(W,{asChild:!0,children:e.jsxs(g,{variant:"outline",className:q("w-full justify-start text-right"),children:[e.jsx(O,{className:"ml-2 h-4 w-4"}),j(w,"dd/MM/yyyy")]})}),e.jsx(z,{className:"w-auto p-0",children:e.jsx(A,{mode:"single",selected:w,onSelect:t=>t&&G(t)})})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs text-muted-foreground",children:"المستودع"}),e.jsx(de,{options:K,value:y,onValueChange:J,placeholder:"كل المستودعات"})]}),e.jsx("div",{className:"flex items-end gap-2",children:e.jsxs(g,{onClick:R,disabled:M,className:"flex-1",children:[e.jsx(pe,{className:q("ml-2 h-4 w-4",M&&"animate-spin")}),"عرض"]})})]})})]}),e.jsxs(L,{children:[e.jsxs(B,{className:"flex flex-row items-center justify-between gap-2 pb-3",children:[e.jsxs("div",{className:"relative w-64 max-w-full",children:[e.jsx(_e,{className:"absolute right-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(ie,{placeholder:"بحث بالمنتج...",value:C,onChange:t=>X(t.target.value),className:"pr-8"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(g,{variant:"outline",size:"sm",onClick:Z,children:[e.jsx(fe,{className:"ml-1 h-4 w-4"})," Excel"]}),e.jsxs(g,{variant:"outline",size:"sm",onClick:()=>window.print(),children:[e.jsx(je,{className:"ml-1 h-4 w-4"})," طباعة"]})]})]}),e.jsx(H,{className:"overflow-x-auto",children:e.jsxs(ne,{children:[e.jsx(le,{children:e.jsxs(v,{children:[e.jsx(u,{className:"text-right",children:"المنتج"}),e.jsx(u,{className:"text-right",children:"صافي المبيعات %"}),e.jsx(u,{className:"text-right",children:"صافي الكمية"}),e.jsx(u,{className:"text-right",children:"صافي المبيعات"}),e.jsx(u,{className:"text-right",children:"التكلفة"}),e.jsx(u,{className:"text-right",children:"مبلغ الإرجاع"}),e.jsx(u,{className:"text-right",children:"كمية المرتجع"}),e.jsx(u,{className:"text-right",children:"مبلغ الإلغاء"}),e.jsx(u,{className:"text-right",children:"كمية الإلغاء"}),e.jsx(u,{className:"text-right",children:"الربح"})]})}),e.jsxs(ce,{children:[_.length===0&&e.jsx(v,{children:e.jsx(r,{colSpan:10,className:"text-center text-muted-foreground py-8",children:M?"جاري التحميل...":"لا توجد بيانات"})}),_.map(t=>e.jsxs(v,{children:[e.jsxs(r,{children:[e.jsx("div",{className:"font-medium",children:t.item_name}),e.jsx("div",{className:"text-xs text-muted-foreground",children:t.item_code})]}),e.jsxs(r,{children:[p(t.net_share,1)," %"]}),e.jsx(r,{children:p(t.net_qty)}),e.jsx(r,{children:m(t.net_amount)}),e.jsx(r,{children:m(t.cost)}),e.jsx(r,{children:m(t.return_amount)}),e.jsx(r,{children:p(t.return_qty)}),e.jsx(r,{children:m(t.cancel_amount)}),e.jsx(r,{children:p(t.cancel_qty)}),e.jsx(r,{className:t.profit>=0?"text-emerald-600":"text-red-600",children:m(t.profit)})]},t.item_id))]}),_.length>0&&e.jsx(me,{children:e.jsxs(v,{children:[e.jsx(r,{className:"font-bold",children:"المجموع"}),e.jsx(r,{className:"font-bold",children:"100 %"}),e.jsx(r,{className:"font-bold",children:p(h.net_qty)}),e.jsx(r,{className:"font-bold",children:m(h.net_amount)}),e.jsx(r,{className:"font-bold",children:m(h.cost)}),e.jsx(r,{className:"font-bold",children:m(h.return_amount)}),e.jsx(r,{className:"font-bold",children:p(h.return_qty)}),e.jsx(r,{className:"font-bold",children:m(h.cancel_amount)}),e.jsx(r,{className:"font-bold",children:p(h.cancel_qty)}),e.jsx(r,{className:q("font-bold",h.profit>=0?"text-emerald-600":"text-red-600"),children:m(h.profit)})]})})]})})]})]})})}export{zt 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.