Files
alrahma_sunday_school_api/apps/admin/.next/static/chunks/27az1pyngxlsz.js
T
2026-06-11 03:22:12 -04:00

1 line
28 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,6655,e=>{"use strict";let n=e.i(47167).default.env.NEXT_PUBLIC_API_URL??"/admin/api/v1";e.s(["ADMIN_API_BASE",0,n])},91182,e=>{"use strict";var n=e.i(43476),t=e.i(71645),a=e.i(51224),s=e.i(6655);let i={ACTIVE:"text-emerald-300 bg-emerald-500/15",TRIALING:"text-sky-300 bg-sky-500/15",PAYMENT_PENDING:"text-amber-300 bg-amber-500/15",PAST_DUE:"text-rose-300 bg-rose-500/15",SUSPENDED:"text-red-300 bg-red-500/15",CANCELLED:"text-zinc-300 bg-zinc-700/60",UNPAID:"text-red-300 bg-red-500/15"},l={DRAFT:"text-zinc-300 bg-zinc-700/60",OPEN:"text-amber-300 bg-amber-500/15",PAYMENT_PENDING:"text-amber-300 bg-amber-500/15",PARTIALLY_PAID:"text-sky-300 bg-sky-500/15",PAID:"text-emerald-300 bg-emerald-500/15",PAST_DUE:"text-rose-300 bg-rose-500/15",VOID:"text-zinc-300 bg-zinc-700/60",UNCOLLECTIBLE:"text-red-200 bg-red-950/60",REFUNDED:"text-zinc-300 bg-zinc-700/60",PARTIALLY_REFUNDED:"text-zinc-300 bg-zinc-700/60"},c="w-full rounded-xl border border-zinc-800 bg-zinc-950 px-3 py-2 text-sm text-zinc-100 outline-none transition focus:border-emerald-500",r="rounded-xl bg-emerald-500 px-4 py-2 text-sm font-semibold text-black hover:bg-emerald-400",o="rounded-xl border border-zinc-700 px-4 py-2 text-sm font-semibold text-zinc-200 hover:border-zinc-500",d=()=>({type:"PROFESSIONAL_SERVICES",description:"",quantity:1,unitAmount:0});function u(e,n){return new Intl.NumberFormat("en-GB",{style:"currency",currency:n,minimumFractionDigits:2}).format(e/100)}function m(e){return e?new Date(e).toLocaleDateString("en-GB",{day:"2-digit",month:"short",year:"numeric"}):"—"}function x(e,n){return"DUE_ON_RECEIPT"===e?"Due on receipt":`Net ${n||e.replace("NET_","")}`}function p({label:e,value:t,tone:a}){return(0,n.jsxs)("div",{className:"panel p-4",children:[(0,n.jsx)("p",{className:"text-xs uppercase tracking-[0.18em] text-zinc-500",children:e}),(0,n.jsx)("p",{className:`mt-2 text-2xl font-black ${a}`,children:t})]})}function g({label:e,value:t}){return(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-[11px] uppercase tracking-[0.16em] text-zinc-500",children:e}),(0,n.jsx)("p",{className:"mt-1 text-sm font-semibold text-zinc-100",children:t})]})}function v({label:e,children:t}){return(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-2 block text-xs uppercase tracking-[0.16em] text-zinc-500",children:e}),t]})}function b({title:e,items:t}){return(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"mb-2 text-xs uppercase tracking-[0.16em] text-zinc-500",children:e}),0===t.length?(0,n.jsx)("div",{className:"rounded-xl border border-zinc-800 px-3 py-3 text-sm text-zinc-500",children:"—"}):(0,n.jsx)("div",{className:"space-y-2",children:t.map(e=>(0,n.jsxs)("div",{className:"rounded-xl border border-zinc-800 px-3 py-3",children:[(0,n.jsx)("p",{className:"text-sm text-zinc-100",children:e.primary}),(0,n.jsx)("p",{className:"mt-1 text-xs text-zinc-500",children:e.secondary})]},e.id))})]})}e.s(["default",0,function(){let{language:e}=(0,a.useAdminI18n)(),[h,N]=(0,t.useTransition)(),j={en:{title:"Billing Console",eyebrow:"Platform Finance",searchPlaceholder:"Search company, billing contact, or slug",all:"All",active:"Active",pastDue:"Past Due",suspended:"Suspended",cancelled:"Cancelled",accounts:"Accounts",receivables:"Receivables",openInvoices:"Open invoices",paidInvoices:"Paid invoices",revenue:"Revenue",billingAccounts:"Billing Accounts",selectAccount:"Select a billing account to manage invoices, credits, dunning, and payment history.",company:"Company",plan:"Plan",subscription:"Subscription",openBalance:"Open balance",credit:"Credit",dunning:"Dunning",accountDetails:"Billing Account",invoiceFeed:"Invoices",draftInvoice:"Create Draft Invoice",saveAccount:"Save account",pauseDunning:"Pause dunning",resumeDunning:"Resume dunning",createDraft:"Create draft",loading:"Loading…",noAccounts:"No billing accounts found",amountDue:"Amount due",amountPaid:"Amount paid",dueDate:"Due date",issueDate:"Issue date",actions:"Actions",lineItems:"Line items",payments:"Payment attempts",credits:"Credits",refunds:"Refunds",timeline:"Timeline",finalize:"Finalize",pay:"Record payment",retry:"Retry payment",void:"Void",writeoff:"Write off",refund:"Refund",creditNote:"Credit note",downloadPdf:"PDF",invoiceType:"Invoice type",blocking:"Blocking invoice",reason:"Reason",billingEmail:"Billing email",legalName:"Legal name",taxId:"Tax ID",taxExempt:"Tax exempt",invoiceTerms:"Invoice terms",selectedInvoice:"Selected invoice",noInvoices:"No invoices yet"},fr:{title:"Console de facturation",eyebrow:"Finance plateforme",searchPlaceholder:"Rechercher une entreprise, un contact facturation ou un slug",all:"Tous",active:"Actifs",pastDue:"En retard",suspended:"Suspendus",cancelled:"Annulés",accounts:"Comptes",receivables:"Créances",openInvoices:"Factures ouvertes",paidInvoices:"Factures payées",revenue:"Revenu",billingAccounts:"Comptes de facturation",selectAccount:"Sélectionnez un compte de facturation pour gérer factures, crédits, relances et paiements.",company:"Entreprise",plan:"Plan",subscription:"Abonnement",openBalance:"Solde ouvert",credit:"Crédit",dunning:"Relance",accountDetails:"Compte de facturation",invoiceFeed:"Factures",draftInvoice:"Créer un brouillon",saveAccount:"Enregistrer",pauseDunning:"Mettre en pause",resumeDunning:"Reprendre",createDraft:"Créer le brouillon",loading:"Chargement…",noAccounts:"Aucun compte trouvé",amountDue:"Montant dû",amountPaid:"Montant payé",dueDate:"Échéance",issueDate:"Date émission",actions:"Actions",lineItems:"Lignes",payments:"Tentatives de paiement",credits:"Crédits",refunds:"Remboursements",timeline:"Historique",finalize:"Finaliser",pay:"Enregistrer paiement",retry:"Relancer paiement",void:"Annuler",writeoff:"Passer en perte",refund:"Rembourser",creditNote:"Avoir",downloadPdf:"PDF",invoiceType:"Type de facture",blocking:"Facture bloquante",reason:"Raison",billingEmail:"Email de facturation",legalName:"Raison sociale",taxId:"Identifiant fiscal",taxExempt:"Exonéré de taxe",invoiceTerms:"Conditions",selectedInvoice:"Facture sélectionnée",noInvoices:"Aucune facture"},ar:{title:"لوحة الفوترة",eyebrow:"مالية المنصة",searchPlaceholder:"ابحث عن الشركة أو جهة الفوترة أو الرابط",all:"الكل",active:"نشط",pastDue:"متأخر",suspended:"معلق",cancelled:"ملغى",accounts:"الحسابات",receivables:"الذمم",openInvoices:"الفواتير المفتوحة",paidInvoices:"الفواتير المدفوعة",revenue:"الإيراد",billingAccounts:"حسابات الفوترة",selectAccount:"اختر حساب فوترة لإدارة الفواتير والأرصدة ومحاولات الدفع.",company:"الشركة",plan:"الخطة",subscription:"الاشتراك",openBalance:"الرصيد المفتوح",credit:"الرصيد",dunning:"المتابعة",accountDetails:"حساب الفوترة",invoiceFeed:"الفواتير",draftInvoice:"إنشاء مسودة فاتورة",saveAccount:"حفظ",pauseDunning:"إيقاف المتابعة",resumeDunning:"استئناف المتابعة",createDraft:"إنشاء المسودة",loading:"جارٍ التحميل…",noAccounts:"لا توجد حسابات فوترة",amountDue:"المبلغ المستحق",amountPaid:"المبلغ المدفوع",dueDate:"تاريخ الاستحقاق",issueDate:"تاريخ الإصدار",actions:"الإجراءات",lineItems:"البنود",payments:"محاولات الدفع",credits:"الأرصدة",refunds:"الاستردادات",timeline:"السجل",finalize:"اعتماد",pay:"تسجيل الدفع",retry:"إعادة المحاولة",void:"إلغاء",writeoff:"شطب",refund:"استرداد",creditNote:"إشعار دائن",downloadPdf:"PDF",invoiceType:"نوع الفاتورة",blocking:"فاتورة حاجزة",reason:"السبب",billingEmail:"بريد الفوترة",legalName:"الاسم القانوني",taxId:"الرقم الضريبي",taxExempt:"معفى من الضريبة",invoiceTerms:"شروط الفاتورة",selectedInvoice:"الفاتورة المحددة",noInvoices:"لا توجد فواتير"}}[e],[y,f]=(0,t.useState)([]),[I,D]=(0,t.useState)(null),[z,E]=(0,t.useState)(""),[A,T]=(0,t.useState)(""),[C,S]=(0,t.useState)(!0),[P,k]=(0,t.useState)(null),[R,w]=(0,t.useState)(null),[_,L]=(0,t.useState)(null),[B,O]=(0,t.useState)(!1),[$,U]=(0,t.useState)(null),[F,M]=(0,t.useState)({legalName:"",billingEmail:"",taxId:"",taxExempt:!1,invoiceTerms:"DUE_ON_RECEIPT",netTermsDays:0}),[q,V]=(0,t.useState)({invoiceType:"MANUAL",isSubscriptionBlocking:!1,adminReason:"",lineItems:[d()]}),[Y,G]=(0,t.useState)(null),[J,H]=(0,t.useState)(""),[K,W]=(0,t.useState)(""),[X,Q]=(0,t.useState)(""),[Z,ee]=(0,t.useState)(""),[en,et]=(0,t.useState)(""),[ea,es]=(0,t.useState)(""),[ei,el]=(0,t.useState)(""),[ec,er]=(0,t.useState)(null),[eo,ed]=(0,t.useState)(null),eu=[{key:"",label:j.all},{key:"ACTIVE",label:j.active},{key:"PAST_DUE",label:j.pastDue},{key:"SUSPENDED",label:j.suspended},{key:"CANCELLED",label:j.cancelled}],em=(0,t.useMemo)(()=>_?.invoices.find(e=>e.id===Y)??_?.invoices[0]??null,[_,Y]);async function ex(e,n){let t=await fetch(`${s.ADMIN_API_BASE}${e}`,{...n,headers:{"Content-Type":"application/json",...n?.headers??{}},credentials:"include",cache:"no-store"});if(t.headers.get("content-type")?.includes("application/pdf"))return await t.blob();let a=await t.json();if(!t.ok)throw Error(a?.message??`Request failed (${t.status})`);return a.data}async function ep(e,n){S(!0),k(null);try{let t=new URLSearchParams({pageSize:"100"});e&&t.set("q",e),n&&t.set("status",n);let a=await ex(`/admin/billing?${t.toString()}`);f(a.data),D(a.stats??null),w(e=>e??a.data[0]?.company.id??null)}catch(e){k(e.message)}finally{S(!1)}}async function eg(e){O(!0),U(null);try{let n=await ex(`/admin/billing/${e}`);L(n),M({legalName:n.legalName,billingEmail:n.billingEmail,taxId:n.taxId??"",taxExempt:n.taxExempt,invoiceTerms:n.invoiceTerms,netTermsDays:n.netTermsDays}),G(n.invoices[0]?.id??null)}catch(e){U(e.message)}finally{O(!1)}}async function ev(){await ep(z||void 0,A||void 0),R&&await eg(R)}function eb(e,n,t){V(a=>({...a,lineItems:a.lineItems.map((a,s)=>s===e?{...a,[n]:t}:a)}))}async function eh(){if(_){er(null),ed(null);try{await ex(`/admin/billing/accounts/${_.id}`,{method:"PATCH",body:JSON.stringify({legalName:F.legalName,billingEmail:F.billingEmail,taxId:F.taxId||null,taxExempt:F.taxExempt,invoiceTerms:F.invoiceTerms,netTermsDays:F.netTermsDays})}),ed("Billing account updated."),await ev()}catch(e){er(e.message)}}}async function eN(e){if(_){er(null),ed(null);try{await ex(`/admin/billing/accounts/${_.id}/${e?"pause-dunning":"resume-dunning"}`,{method:"POST",body:JSON.stringify({})}),ed(e?"Dunning paused.":"Dunning resumed."),await ev()}catch(e){er(e.message)}}}async function ej(){if(_){er(null),ed(null);try{await ex(`/admin/billing/accounts/${_.id}/invoices`,{method:"POST",body:JSON.stringify({invoiceType:q.invoiceType,isSubscriptionBlocking:q.isSubscriptionBlocking,adminReason:q.adminReason||null,lineItems:q.lineItems.map(e=>({...e,unitAmount:Number(e.unitAmount),quantity:Number(e.quantity)}))})}),V({invoiceType:"MANUAL",isSubscriptionBlocking:!1,adminReason:"",lineItems:[d()]}),ed("Draft invoice created."),await ev()}catch(e){er(e.message)}}}async function ey(e,n){if(em){er(null),ed(null);try{await ex(`/admin/billing/invoices/${em.id}/${e}`,{method:"POST",body:JSON.stringify(n??{})}),ed("Invoice action completed."),await ev()}catch(e){er(e.message)}}}async function ef(){if(em){er(null);try{let e=await ex(`/admin/billing/invoices/${em.id}/pdf`),n=URL.createObjectURL(e),t=document.createElement("a");t.href=n,t.download=`${em.invoiceNumber??em.id}.pdf`,t.click(),URL.revokeObjectURL(n)}catch(e){er(e.message)}}}return(0,t.useEffect)(()=>{let e=setTimeout(()=>{ep(z||void 0,A||void 0)},200);return()=>clearTimeout(e)},[z,A]),(0,t.useEffect)(()=>{R&&eg(R)},[R]),(0,n.jsxs)("div",{className:"shell space-y-6 py-8",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-xs uppercase tracking-[0.24em] text-emerald-400",children:j.eyebrow}),(0,n.jsx)("h1",{className:"mt-2 text-3xl font-black text-zinc-50",children:j.title})]}),(0,n.jsx)("div",{className:"w-full max-w-md",children:(0,n.jsx)("input",{value:z,onChange:e=>E(e.target.value),placeholder:j.searchPlaceholder,className:"w-full rounded-2xl border border-zinc-800 bg-zinc-950 px-4 py-3 text-sm text-zinc-100 outline-none transition focus:border-emerald-500"})})]}),I&&(0,n.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-5",children:[(0,n.jsx)(p,{label:j.accounts,value:String(I.billingAccountCount),tone:"text-zinc-50"}),(0,n.jsx)(p,{label:j.receivables,value:u(I.accountsReceivableTotal,"MAD"),tone:"text-amber-300"}),(0,n.jsx)(p,{label:j.openInvoices,value:String(I.openInvoiceCount),tone:"text-amber-300"}),(0,n.jsx)(p,{label:j.paidInvoices,value:String(I.paidInvoiceCount),tone:"text-emerald-300"}),(0,n.jsx)(p,{label:j.revenue,value:u(I.recognizedRevenueTotal,"MAD"),tone:"text-sky-300"})]}),(0,n.jsx)("div",{className:"flex flex-wrap gap-2",children:eu.map(e=>(0,n.jsx)("button",{onClick:()=>N(()=>T(e.key)),className:`rounded-full px-3 py-1.5 text-xs font-semibold transition ${A===e.key?"bg-emerald-500 text-black":"bg-zinc-900 text-zinc-400 hover:bg-zinc-800 hover:text-zinc-200"}`,children:e.label},e.key))}),(0,n.jsxs)("div",{className:"grid gap-6 xl:grid-cols-[1.15fr,1.85fr]",children:[(0,n.jsxs)("section",{className:"panel overflow-hidden",children:[(0,n.jsx)("div",{className:"border-b border-zinc-800 px-5 py-4",children:(0,n.jsx)("h2",{className:"text-sm font-semibold text-zinc-100",children:j.billingAccounts})}),(0,n.jsx)("div",{className:"max-h-[76vh] overflow-y-auto",children:C?(0,n.jsx)("div",{className:"px-5 py-10 text-sm text-zinc-500",children:j.loading}):P?(0,n.jsx)("div",{className:"px-5 py-10 text-sm text-red-400",children:P}):0===y.length?(0,n.jsx)("div",{className:"px-5 py-10 text-sm text-zinc-500",children:j.noAccounts}):(0,n.jsx)("div",{className:"divide-y divide-zinc-800",children:y.map(e=>{let t=R===e.company.id,a=e.company.subscription;return(0,n.jsxs)("button",{onClick:()=>w(e.company.id),className:`w-full px-5 py-4 text-left transition ${t?"bg-emerald-500/8":"hover:bg-zinc-900/80"}`,children:[(0,n.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"font-semibold text-zinc-100",children:e.company.name}),(0,n.jsx)("p",{className:"mt-1 text-xs text-zinc-500",children:e.billingEmail})]}),(0,n.jsx)("span",{className:`rounded-full px-2 py-0.5 text-[11px] font-semibold ${i[a?.status??"CANCELLED"]??"text-zinc-300 bg-zinc-700/60"}`,children:a?.status??"NO_SUBSCRIPTION"})]}),(0,n.jsxs)("div",{className:"mt-4 grid grid-cols-3 gap-3 text-xs",children:[(0,n.jsx)(g,{label:j.plan,value:a?.plan??"—"}),(0,n.jsx)(g,{label:j.openBalance,value:u(e.openBalance,e.creditBalances[0]?.currency??"MAD")}),(0,n.jsx)(g,{label:j.credit,value:u(e.creditBalance,e.creditBalances[0]?.currency??"MAD")})]}),(0,n.jsxs)("div",{className:"mt-3 flex items-center justify-between text-[11px] text-zinc-500",children:[(0,n.jsx)("span",{children:x(e.invoiceTerms,e.netTermsDays)}),(0,n.jsx)("span",{children:e.dunningPaused?`${j.dunning}: paused`:`${j.dunning}: live`})]})]},e.id)})})})]}),(0,n.jsx)("section",{className:"space-y-6",children:R?B&&!_?(0,n.jsx)("div",{className:"panel px-6 py-10 text-sm text-zinc-500",children:j.loading}):$?(0,n.jsx)("div",{className:"panel px-6 py-10 text-sm text-red-400",children:$}):_?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("section",{className:"panel p-5",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-4 border-b border-zinc-800 pb-5 lg:flex-row lg:items-start lg:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-xs uppercase tracking-[0.2em] text-zinc-500",children:j.accountDetails}),(0,n.jsx)("h2",{className:"mt-2 text-2xl font-bold text-zinc-50",children:_.company.name}),(0,n.jsxs)("div",{className:"mt-3 flex flex-wrap gap-2 text-xs",children:[(0,n.jsx)("span",{className:`rounded-full px-2 py-1 font-semibold ${i[_.company.subscription?.status??"CANCELLED"]??"text-zinc-300 bg-zinc-700/60"}`,children:_.company.subscription?.status??"NO_SUBSCRIPTION"}),(0,n.jsxs)("span",{className:"rounded-full bg-zinc-900 px-2 py-1 text-zinc-300",children:[_.company.subscription?.plan??"No plan"," / ",_.company.subscription?.billingPeriod??"—"]}),(0,n.jsx)("span",{className:"rounded-full bg-zinc-900 px-2 py-1 text-zinc-300",children:x(_.invoiceTerms,_.netTermsDays)})]})]}),(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-3 text-right text-sm sm:grid-cols-4",children:[(0,n.jsx)(g,{label:j.openBalance,value:u(_.openBalance,_.creditBalances[0]?.currency??"MAD")}),(0,n.jsx)(g,{label:j.credit,value:u(_.creditBalance,_.creditBalances[0]?.currency??"MAD")}),(0,n.jsx)(g,{label:j.amountPaid,value:u(_.paidBalance,_.creditBalances[0]?.currency??"MAD")}),(0,n.jsx)(g,{label:j.dunning,value:_.dunningPaused?"Paused":"Live"})]})]}),(0,n.jsxs)("div",{className:"mt-5 grid gap-4 lg:grid-cols-2",children:[(0,n.jsx)(v,{label:j.legalName,children:(0,n.jsx)("input",{value:F.legalName,onChange:e=>M(n=>({...n,legalName:e.target.value})),className:c})}),(0,n.jsx)(v,{label:j.billingEmail,children:(0,n.jsx)("input",{value:F.billingEmail,onChange:e=>M(n=>({...n,billingEmail:e.target.value})),className:c})}),(0,n.jsx)(v,{label:j.taxId,children:(0,n.jsx)("input",{value:F.taxId,onChange:e=>M(n=>({...n,taxId:e.target.value})),className:c})}),(0,n.jsx)(v,{label:j.invoiceTerms,children:(0,n.jsxs)("select",{value:F.invoiceTerms,onChange:e=>M(n=>({...n,invoiceTerms:e.target.value,netTermsDays:"DUE_ON_RECEIPT"===e.target.value?0:n.netTermsDays||Number(e.target.value.replace("NET_",""))})),className:c,children:[(0,n.jsx)("option",{value:"DUE_ON_RECEIPT",children:"Due on receipt"}),(0,n.jsx)("option",{value:"NET_7",children:"Net 7"}),(0,n.jsx)("option",{value:"NET_15",children:"Net 15"}),(0,n.jsx)("option",{value:"NET_30",children:"Net 30"}),(0,n.jsx)("option",{value:"NET_45",children:"Net 45"}),(0,n.jsx)("option",{value:"NET_60",children:"Net 60"})]})})]}),(0,n.jsxs)("div",{className:"mt-4 flex flex-wrap items-center gap-3",children:[(0,n.jsxs)("label",{className:"flex items-center gap-2 text-sm text-zinc-300",children:[(0,n.jsx)("input",{type:"checkbox",checked:F.taxExempt,onChange:e=>M(n=>({...n,taxExempt:e.target.checked})),className:"rounded border-zinc-700 bg-zinc-950 text-emerald-500"}),j.taxExempt]}),(0,n.jsx)("button",{onClick:eh,className:"rounded-xl bg-emerald-500 px-4 py-2 text-sm font-semibold text-black hover:bg-emerald-400",children:j.saveAccount}),(0,n.jsx)("button",{onClick:()=>eN(!_.dunningPaused),className:"rounded-xl border border-zinc-700 px-4 py-2 text-sm font-semibold text-zinc-200 hover:border-zinc-500",children:_.dunningPaused?j.resumeDunning:j.pauseDunning})]})]}),(0,n.jsxs)("section",{className:"panel p-5",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[(0,n.jsx)("h3",{className:"text-sm font-semibold text-zinc-100",children:j.invoiceFeed}),h||B?(0,n.jsx)("span",{className:"text-xs text-zinc-500",children:j.loading}):null]}),0===_.invoices.length?(0,n.jsx)("div",{className:"mt-4 text-sm text-zinc-500",children:j.noInvoices}):(0,n.jsxs)("div",{className:"mt-4 grid gap-4 xl:grid-cols-[1.2fr,0.8fr]",children:[(0,n.jsx)("div",{className:"overflow-hidden rounded-2xl border border-zinc-800",children:(0,n.jsxs)("table",{className:"w-full text-sm",children:[(0,n.jsx)("thead",{className:"bg-zinc-950/80",children:(0,n.jsxs)("tr",{className:"text-left text-xs uppercase tracking-[0.16em] text-zinc-500",children:[(0,n.jsx)("th",{className:"px-4 py-3",children:"Invoice"}),(0,n.jsx)("th",{className:"px-4 py-3",children:j.amountDue}),(0,n.jsx)("th",{className:"px-4 py-3",children:j.dueDate}),(0,n.jsx)("th",{className:"px-4 py-3",children:j.actions})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-zinc-800",children:_.invoices.map(e=>(0,n.jsxs)("tr",{className:`cursor-pointer transition hover:bg-zinc-900/80 ${em?.id===e.id?"bg-emerald-500/8":""}`,onClick:()=>G(e.id),children:[(0,n.jsx)("td",{className:"px-4 py-3",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"font-medium text-zinc-100",children:e.invoiceNumber??e.invoiceType}),(0,n.jsx)("p",{className:"mt-1 text-xs text-zinc-500",children:m(e.invoiceDate??e.createdAt)})]})}),(0,n.jsx)("td",{className:"px-4 py-3 text-zinc-200",children:u(e.amountDue,e.currency)}),(0,n.jsx)("td",{className:"px-4 py-3 text-zinc-400",children:m(e.dueAt)}),(0,n.jsx)("td",{className:"px-4 py-3",children:(0,n.jsx)("span",{className:`rounded-full px-2 py-0.5 text-[11px] font-semibold ${l[e.status]??"text-zinc-300 bg-zinc-700/60"}`,children:e.status})})]},e.id))})]})}),em&&(0,n.jsxs)("div",{className:"space-y-4 rounded-2xl border border-zinc-800 bg-zinc-950/80 p-4",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-xs uppercase tracking-[0.16em] text-zinc-500",children:j.selectedInvoice}),(0,n.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h4",{className:"text-lg font-semibold text-zinc-50",children:em.invoiceNumber??em.invoiceType}),(0,n.jsxs)("p",{className:"mt-1 text-sm text-zinc-400",children:[j.issueDate,": ",m(em.invoiceDate??em.createdAt)]})]}),(0,n.jsx)("span",{className:`rounded-full px-2 py-1 text-xs font-semibold ${l[em.status]??"text-zinc-300 bg-zinc-700/60"}`,children:em.status})]})]}),(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[(0,n.jsx)(g,{label:j.amountDue,value:u(em.amountDue,em.currency)}),(0,n.jsx)(g,{label:j.amountPaid,value:u(em.amountPaid,em.currency)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"mb-2 text-xs uppercase tracking-[0.16em] text-zinc-500",children:j.lineItems}),(0,n.jsx)("div",{className:"space-y-2",children:em.lineItems.map((e,t)=>(0,n.jsx)("div",{className:"rounded-xl border border-zinc-800 px-3 py-2",children:(0,n.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-sm text-zinc-100",children:e.description}),(0,n.jsxs)("p",{className:"text-xs text-zinc-500",children:[e.quantity," × ",u(e.unitAmount,e.currency)]})]}),(0,n.jsx)("p",{className:"text-sm font-medium text-zinc-200",children:u(e.amount,e.currency)})]})},`${em.id}-${t}`))})]}),(0,n.jsxs)("div",{className:"grid gap-2",children:["DRAFT"===em.status?(0,n.jsx)("button",{onClick:()=>ey("finalize"),className:r,children:j.finalize}):null,["OPEN","PAYMENT_PENDING","PAST_DUE","PARTIALLY_PAID"].includes(em.status)?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"grid grid-cols-[1fr,auto] gap-2",children:[(0,n.jsx)("input",{value:J,onChange:e=>H(e.target.value),placeholder:"Amount in cents",className:c}),(0,n.jsx)("button",{onClick:()=>ey("pay",J?{amount:Number(J)}:{}),className:r,children:j.pay})]}),(0,n.jsx)("button",{onClick:()=>ey("retry-payment"),className:o,children:j.retry}),(0,n.jsxs)("div",{className:"grid gap-2 sm:grid-cols-[1fr,auto]",children:[(0,n.jsx)("input",{value:ea,onChange:e=>es(e.target.value),placeholder:j.reason,className:c}),(0,n.jsx)("button",{onClick:()=>ey("void",{reason:ea}),className:o,children:j.void})]}),(0,n.jsxs)("div",{className:"grid gap-2 sm:grid-cols-[1fr,auto]",children:[(0,n.jsx)("input",{value:ei,onChange:e=>el(e.target.value),placeholder:j.reason,className:c}),(0,n.jsx)("button",{onClick:()=>ey("uncollectible",{reason:ei}),className:o,children:j.writeoff})]}),(0,n.jsxs)("div",{className:"grid gap-2 sm:grid-cols-[120px,1fr,auto]",children:[(0,n.jsx)("input",{value:K,onChange:e=>W(e.target.value),placeholder:"Cents",className:c}),(0,n.jsx)("input",{value:X,onChange:e=>Q(e.target.value),placeholder:j.reason,className:c}),(0,n.jsx)("button",{onClick:()=>ey("credit-notes",{amount:Number(K),reason:X}),className:o,children:j.creditNote})]})]}):null,["PAID","PARTIALLY_REFUNDED","REFUNDED"].includes(em.status)?(0,n.jsxs)("div",{className:"grid gap-2 sm:grid-cols-[120px,1fr,auto]",children:[(0,n.jsx)("input",{value:Z,onChange:e=>ee(e.target.value),placeholder:"Cents",className:c}),(0,n.jsx)("input",{value:en,onChange:e=>et(e.target.value),placeholder:j.reason,className:c}),(0,n.jsx)("button",{onClick:()=>ey("refunds",{amount:Number(Z),reason:en}),className:o,children:j.refund})]}):null,em.invoiceNumber?(0,n.jsx)("button",{onClick:ef,className:o,children:j.downloadPdf}):null]}),(0,n.jsx)(b,{title:j.payments,items:em.paymentAttempts.map(e=>({id:e.id,primary:`${e.status} \xb7 ${u(e.amount,e.currency)}`,secondary:`${m(e.attemptedAt)}${e.failureMessage?` \xb7 ${e.failureMessage}`:""}`}))}),(0,n.jsx)(b,{title:j.credits,items:em.creditNotes.map(e=>({id:e.id,primary:`${u(e.amount,e.currency)} \xb7 ${e.status}`,secondary:e.reason}))}),(0,n.jsx)(b,{title:j.refunds,items:em.refunds.map(e=>({id:e.id,primary:`${u(e.amount,e.currency)} \xb7 ${e.status}`,secondary:e.reason}))})]})]})]}),(0,n.jsxs)("section",{className:"panel p-5",children:[(0,n.jsx)("h3",{className:"text-sm font-semibold text-zinc-100",children:j.draftInvoice}),(0,n.jsxs)("div",{className:"mt-4 grid gap-4 lg:grid-cols-[1fr,1fr,auto]",children:[(0,n.jsx)(v,{label:j.invoiceType,children:(0,n.jsxs)("select",{value:q.invoiceType,onChange:e=>V(n=>({...n,invoiceType:e.target.value})),className:c,children:[(0,n.jsx)("option",{value:"MANUAL",children:"Manual"}),(0,n.jsx)("option",{value:"ONE_TIME",children:"One time"}),(0,n.jsx)("option",{value:"SUBSCRIPTION_RENEWAL",children:"Subscription renewal"}),(0,n.jsx)("option",{value:"SUBSCRIPTION_INITIAL",children:"Subscription initial"}),(0,n.jsx)("option",{value:"TRIAL_CONVERSION",children:"Trial conversion"}),(0,n.jsx)("option",{value:"CORRECTION",children:"Correction"})]})}),(0,n.jsx)(v,{label:j.reason,children:(0,n.jsx)("input",{value:q.adminReason,onChange:e=>V(n=>({...n,adminReason:e.target.value})),className:c})}),(0,n.jsxs)("label",{className:"flex items-end gap-2 text-sm text-zinc-300",children:[(0,n.jsx)("input",{type:"checkbox",checked:q.isSubscriptionBlocking,onChange:e=>V(n=>({...n,isSubscriptionBlocking:e.target.checked})),className:"mb-3 rounded border-zinc-700 bg-zinc-950 text-emerald-500"}),(0,n.jsx)("span",{className:"mb-2",children:j.blocking})]})]}),(0,n.jsx)("div",{className:"mt-4 space-y-3",children:q.lineItems.map((e,t)=>(0,n.jsxs)("div",{className:"grid gap-3 rounded-2xl border border-zinc-800 bg-zinc-950/60 p-4 lg:grid-cols-[180px,1fr,100px,140px,auto]",children:[(0,n.jsxs)("select",{value:e.type,onChange:e=>eb(t,"type",e.target.value),className:c,children:[(0,n.jsx)("option",{value:"PROFESSIONAL_SERVICES",children:"Professional services"}),(0,n.jsx)("option",{value:"SETUP_FEE",children:"Setup fee"}),(0,n.jsx)("option",{value:"SUBSCRIPTION_FEE",children:"Subscription fee"}),(0,n.jsx)("option",{value:"MANUAL_ADJUSTMENT",children:"Manual adjustment"}),(0,n.jsx)("option",{value:"DISCOUNT",children:"Discount"})]}),(0,n.jsx)("input",{value:e.description,onChange:e=>eb(t,"description",e.target.value),placeholder:"Description",className:c}),(0,n.jsx)("input",{type:"number",min:1,value:e.quantity,onChange:e=>eb(t,"quantity",Number(e.target.value)),className:c}),(0,n.jsx)("input",{type:"number",value:e.unitAmount,onChange:e=>eb(t,"unitAmount",Number(e.target.value)),placeholder:"Unit amount (cents)",className:c}),(0,n.jsx)("button",{onClick:()=>V(e=>({...e,lineItems:1===e.lineItems.length?e.lineItems:e.lineItems.filter((e,n)=>n!==t)})),className:"rounded-xl border border-zinc-700 px-3 py-2 text-sm text-zinc-300 hover:border-zinc-500",children:"Remove"})]},t))}),(0,n.jsxs)("div",{className:"mt-4 flex flex-wrap gap-3",children:[(0,n.jsx)("button",{onClick:()=>V(e=>({...e,lineItems:[...e.lineItems,d()]})),className:"rounded-xl border border-zinc-700 px-4 py-2 text-sm font-semibold text-zinc-200 hover:border-zinc-500",children:"Add line"}),(0,n.jsx)("button",{onClick:ej,className:r,children:j.createDraft})]})]}),(0,n.jsx)("section",{className:"panel p-5",children:(0,n.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,n.jsx)(b,{title:j.timeline,items:_.events.map(e=>({id:e.id,primary:e.eventType,secondary:`${e.source} \xb7 ${m(e.createdAt)}`}))}),(0,n.jsx)(b,{title:j.credits,items:_.creditLedgerEntries.map(e=>({id:e.id,primary:`${u(e.amount,e.currency)} \xb7 ${e.type}`,secondary:e.reason}))})]})})]}):null:(0,n.jsx)("div",{className:"panel px-6 py-10 text-sm text-zinc-500",children:j.selectAccount})})]}),ec?(0,n.jsx)("div",{className:"panel p-4 text-sm text-red-400",children:ec}):null,eo?(0,n.jsx)("div",{className:"panel p-4 text-sm text-emerald-300",children:eo}):null]})}])}]);