Files
machartaa_admin_dist/dist/assets/subscription-630ad458.js
T

2 lines
6.3 KiB
JavaScript

import{_ as w,O as _,I as A,J as g,K as v,Z as x,R as d}from"./index-185c08ed.js";import{fetchMatchingUserIds as b,formatTableResult as R}from"./supabaseTableQuery-ebcdd1b8.js";function D(e,t,n=(s,i)=>s[i]){const s=[...e],{sort:i,order:o}=t;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 P(e,t,n="percent"){const s=Number(e)||0,i=Number(t)||0;return i<=0?Math.max(0,Math.round(s)):n==="simple"?Math.max(0,Math.round(s-i)):Math.max(0,Math.round(s*(1-i/100)))}function O(e,t="percent"){const n=Number(e)||0;return n<=0?"—":t==="simple"?`${n.toLocaleString("fa-IR")} ریال`:`${n}٪`}async function U(e){const{TableEngineRequest:t}=await w(()=>import("./buildSupabaseQuery-32cb26f7.js"),["assets/buildSupabaseQuery-32cb26f7.js","assets/index-185c08ed.js","assets/index-0643191e.css"]),n={...e};!n.sort&&!n.order&&(n.order="-sort_order");const s=await t(n,"subscription_plans");if(Array.isArray(s==null?void 0:s.rows)){const i=s.rows.map((o,r)=>({...o,index:r,final_price:P(Number(o.price),Number(o.discount_percent||0),o.discount_type||"percent")}));return{...s,rows:i}}return s}const T=new Set(["plan_title","payment_status","status","final_price","expires_at","created_at","user_id","plan_id"]),I=new Set(["id","plan_title","final_price","payment_status","status","expires_at","created_at"]),E=new Set(["user_name","user_phone"]);function k(e){var s,i;const t=((s=e.sort)==null?void 0:s.key)||(e.order?String(e.order).replace(/^[-+]/,""):null);let n=!1;return(i=e.sort)!=null&&i.key?n=e.sort.order==="asc":e.order&&(n=!String(e.order).startsWith("-")),{sortKey:t||null,ascending:n}}function y(e){const t=Array.isArray(e.users)?e.users[0]:e.users;let n="نامشخص";return t!=null&&t.name?n=t.name:t!=null&&t.first_name||t!=null&&t.last_name?n=`${t.first_name||""} ${t.last_name||""}`.trim():t!=null&&t.phone&&(n=t.phone),{...e,user_name:n,user_phone:(t==null?void 0:t.phone)||""}}async function $(e){const{limit:t=20,page:n=1,search:s,filters:i}=e,{sortKey:o,ascending:r}=k(e),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}T.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(y),p=D(u,{sort:{key:o,order:r?"asc":"desc"}}),f=(n-1)*t,m=a.total??p.length;return{rows:p.slice(f,f+t).map((S,h)=>({...S,index:f+h})),total:m,query:{...e,page:n,limit:t,total:m}}}o&&I.has(o)?c.sort={key:o,order:r?"asc":"desc"}:c.order="-created_at",c.page=n,c.limit=t;const l=await _("subscription_purchases",c);return R(l.rows||[],l.total??0,e,y)}async function C(e){return await A("subscription_plans",{title:e.title,description:e.description||null,image_url:e.image_url,price:e.price,discount_percent:e.discount_percent??0,discount_type:e.discount_type==="simple"?"simple":"percent",duration_days:e.duration_days,is_active:e.is_active??!0,sort_order:e.sort_order??0})}async function N(e,t){const n=await g("subscription_plans",e,{title:t.title,description:t.description||null,image_url:t.image_url,price:t.price,discount_percent:t.discount_percent??0,discount_type:t.discount_type==="simple"?"simple":"percent",duration_days:t.duration_days,is_active:t.is_active??!0,sort_order:t.sort_order??0,updated_at:new Date().toISOString()});return Array.isArray(n)?n:[n]}async function K(e){await v("subscription_plans",e)}async function F(e,t){const n=await g("subscription_plans",e,{is_active:t,updated_at:new Date().toISOString()});return Array.isArray(n)?n:[n]}async function G(e){var c,l;if(!e)return{isActive:!1,label:"کاربر متصل نیست",planTitle:null,expiresAt:null,remainingDays:0};const t=new Date,n=t.toISOString(),i=(c=(await _("subscription_purchases",{filters:[{field:"user_id",op:"eq",value:e},{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-t.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:e}],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 H(){const e=await x("subscription_plans",{order:"-sort_order"});return Array.isArray(e)?e:[]}async function B(){return await d.post("/admin/subscription/reconcile-pending")}async function V(e){return await d.post("/admin/subscription/grant",e)}async function W(e){return(await d.post("/admin/subscription/audience/preview",e)).data}async function j(e){return await d.post("/admin/subscription/grant-segment",e)}async function J(e){return await d.post("/admin/subscription/extend",e)}async function Z(e){return await d.post(`/admin/subscription/${e}/cancel`,{mode:"cancel"})}async function z(e){return await d.delete(`/admin/subscription/${e}`)}export{W as a,j as b,V as c,J as d,P as e,O as f,H as g,U as h,$ as i,C as j,K as k,B as l,Z as m,z as n,G as o,F as t,N as u};