2 lines
6.8 KiB
JavaScript
2 lines
6.8 KiB
JavaScript
import{_ as A,O as _,I as v,J as y,K as x,Z as R,R as d}from"./index-90ac1a44.js";import{fetchMatchingUserIds as b,formatTableResult as D}from"./supabaseTableQuery-19bc7c1f.js";function P(t,e,n=(s,i)=>s[i]){const s=[...t],{sort:i,order:o}=e;if(i!=null&&i.key){const r=i.order==="asc";return s.sort((c,l)=>{const a=n(c,i.key),u=n(l,i.key);return a<u?r?-1:1:a>u?r?1:-1:0}),s}if(o){const r=!o.startsWith("-"),c=o.replace(/^[-+]/,"");return s.sort((l,a)=>{const u=n(l,c),p=n(a,c);return u<p?r?-1:1:u>p?r?1:-1:0}),s}return s}function k(t,e,n="percent"){const s=Number(t)||0,i=Number(e)||0;return i<=0?Math.max(0,Math.round(s)):n==="simple"||n==="amount"||n==="fixed"||i>100?Math.max(0,Math.round(s-i)):Math.max(0,Math.round(s*(1-Math.min(i,100)/100)))}function S(t,e){const n=t==="simple"?"simple":"percent",s=Number(e),i=Number.isFinite(s)?s:0;return i<0?{ok:!1,message:"مقدار تخفیف نمیتواند منفی باشد"}:n==="percent"&&i>100?{ok:!1,message:"درصد تخفیف باید بین ۰ تا ۱۰۰ باشد"}:{ok:!0,discount_type:n,discount_percent:Math.round(i)}}function O(t,e="percent"){const n=Number(t)||0;return n<=0?"—":e==="simple"?`${n.toLocaleString("fa-IR")} ریال`:`${n}٪`}async function U(t){const{TableEngineRequest:e}=await A(()=>import("./buildSupabaseQuery-c046d1a6.js"),["assets/buildSupabaseQuery-c046d1a6.js","assets/index-90ac1a44.js","assets/index-0643191e.css"]),n={...t};!n.sort&&!n.order&&(n.order="-sort_order");const s=await e(n,"subscription_plans");if(Array.isArray(s==null?void 0:s.rows)){const i=s.rows.map((o,r)=>({...o,index:r,final_price:k(Number(o.price),Number(o.discount_percent||0),o.discount_type||"percent")}));return{...s,rows:i}}return s}const I=new Set(["plan_title","payment_status","status","final_price","expires_at","created_at","user_id","plan_id"]),T=new Set(["id","plan_title","final_price","payment_status","status","expires_at","created_at"]),E=new Set(["user_name","user_phone"]);function M(t){var s,i;const e=((s=t.sort)==null?void 0:s.key)||(t.order?String(t.order).replace(/^[-+]/,""):null);let n=!1;return(i=t.sort)!=null&&i.key?n=t.sort.order==="asc":t.order&&(n=!String(t.order).startsWith("-")),{sortKey:e||null,ascending:n}}function g(t){const e=Array.isArray(t.users)?t.users[0]:t.users;let n="نامشخص";return e!=null&&e.name?n=e.name:e!=null&&e.first_name||e!=null&&e.last_name?n=`${e.first_name||""} ${e.last_name||""}`.trim():e!=null&&e.phone&&(n=e.phone),{...t,user_name:n,user_phone:(e==null?void 0:e.phone)||""}}async function $(t){const{limit:e=20,page:n=1,search:s,filters:i}=t,{sortKey:o,ascending:r}=M(t),c={filters:[],select:["*","users(name, phone, first_name, last_name)"]};if(s!=null&&s.trim()){const a=await b(s);a.length&&(c.includeIn={field:"user_id",values:a})}if(i!=null&&i.length){for(const a of i)if(!(a.hidden||!a.field)){if(a.field==="user_name"||a.field==="user_phone"){if(["eq","has","like"].includes(a.op)){const u=await b(String(a.value));c.includeIn={field:"user_id",values:u.length?u:["00000000-0000-0000-0000-000000000000"]}}continue}I.has(a.field)&&c.filters.push(a)}}if(o&&E.has(o)){c.order="-created_at",c.limit=5e3,c.page=1;const a=await _("subscription_purchases",c),u=(a.rows||[]).map(g),p=P(u,{sort:{key:o,order:r?"asc":"desc"}}),f=(n-1)*e,m=a.total??p.length;return{rows:p.slice(f,f+e).map((h,w)=>({...h,index:f+w})),total:m,query:{...t,page:n,limit:e,total:m}}}o&&T.has(o)?c.sort={key:o,order:r?"asc":"desc"}:c.order="-created_at",c.page=n,c.limit=e;const l=await _("subscription_purchases",c);return D(l.rows||[],l.total??0,t,g)}async function C(t){const e=S(t.discount_type,t.discount_percent??0);if(!e.ok)throw new Error(e.message);return await v("subscription_plans",{title:t.title,description:t.description||null,image_url:t.image_url,price:t.price,discount_percent:e.discount_percent,discount_type:e.discount_type,duration_days:t.duration_days,is_active:t.is_active??!0,sort_order:t.sort_order??0})}async function F(t,e){const n=S(e.discount_type,e.discount_percent??0);if(!n.ok)throw new Error(n.message);const s=await y("subscription_plans",t,{title:e.title,description:e.description||null,image_url:e.image_url,price:e.price,discount_percent:n.discount_percent,discount_type:n.discount_type,duration_days:e.duration_days,is_active:e.is_active??!0,sort_order:e.sort_order??0,updated_at:new Date().toISOString()});return Array.isArray(s)?s:[s]}async function K(t){await x("subscription_plans",t)}async function G(t,e){const n=await y("subscription_plans",t,{is_active:e,updated_at:new Date().toISOString()});return Array.isArray(n)?n:[n]}async function H(t){var c,l;if(!t)return{isActive:!1,label:"کاربر متصل نیست",planTitle:null,expiresAt:null,remainingDays:0};const e=new Date,n=e.toISOString(),i=(c=(await _("subscription_purchases",{filters:[{field:"user_id",op:"eq",value:t},{field:"payment_status",op:"eq",value:"paid"},{field:"status",op:"eq",value:"active"},{field:"expires_at",op:"gt",value:n}],order:"-expires_at",limit:1,page:1,select:["plan_title","status","payment_status","expires_at"]})).rows)==null?void 0:c[0];if(i!=null&&i.expires_at){const a=new Date(i.expires_at).getTime(),u=Math.max(1,Math.ceil((a-e.getTime())/(1e3*60*60*24))),p=u.toLocaleString("fa-IR");return{isActive:!0,label:u===1?"فعال — ۱ روز باقیمانده":`فعال — ${p} روز باقیمانده`,planTitle:i.plan_title||null,expiresAt:i.expires_at,remainingDays:u}}const r=(l=(await _("subscription_purchases",{filters:[{field:"user_id",op:"eq",value:t}],order:"-created_at",limit:1,page:1,select:["plan_title","status","payment_status","expires_at"]})).rows)==null?void 0:l[0];return r?r.payment_status==="pending"||r.status==="pending"?{isActive:!1,label:"در انتظار پرداخت",planTitle:r.plan_title||null,expiresAt:r.expires_at||null,remainingDays:0}:r.status==="cancelled"||r.payment_status==="cancelled"?{isActive:!1,label:"لغو شده",planTitle:r.plan_title||null,expiresAt:r.expires_at||null,remainingDays:0}:{isActive:!1,label:"منقضی شده",planTitle:r.plan_title||null,expiresAt:r.expires_at||null,remainingDays:0}:{isActive:!1,label:"بدون اشتراک",planTitle:null,expiresAt:null,remainingDays:0}}async function B(){const t=await R("subscription_plans",{order:"-sort_order"});return Array.isArray(t)?t:[]}async function V(){return await d.post("/admin/subscription/reconcile-pending")}async function W(t){return await d.post("/admin/subscription/grant",t)}async function j(t){return(await d.post("/admin/subscription/audience/preview",t)).data}async function J(t){return await d.post("/admin/subscription/grant-segment",t)}async function Z(t){return await d.post("/admin/subscription/extend",t)}async function z(t){return await d.post(`/admin/subscription/${t}/cancel`,{mode:"cancel"})}async function Q(t){return await d.delete(`/admin/subscription/${t}`)}export{j as a,J as b,W as c,Z as d,k as e,O as f,B as g,U as h,$ as i,C as j,K as k,V as l,z as m,Q as n,H as o,G as t,F as u,S as v};
|