diff --git a/src/App.vue b/src/App.vue index 9bb69ff..bf1c6b8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -311,20 +311,27 @@ const newestMember = computed(() => [...members.value].sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt))[0] || null, ) const paidPayments = computed(() => payments.value.filter((payment) => payment.status === 'paid')) -const pendingPayments = computed(() => payments.value.filter((payment) => payment.status !== 'paid')) +const revenuePaidPayments = computed(() => paidPayments.value.filter((payment) => payment.provider !== 'comp')) +const compPayments = computed(() => paidPayments.value.filter((payment) => payment.provider === 'comp')) +const pendingPayments = computed(() => payments.value.filter((payment) => payment.status !== 'paid' && payment.provider !== 'comp')) +const compedPaymentValue = (payment) => { + const amount = Number(payment.amountUsd) + if (Number.isFinite(amount) && amount > 0) return amount + return Number(payment.months || 1) * membershipMonthlyUsd.value +} const paymentTotals = computed(() => { - const paid = paidPayments.value.reduce((total, payment) => total + Number(payment.amountUsd || 0), 0) + const paid = revenuePaidPayments.value.reduce((total, payment) => total + Number(payment.amountUsd || 0), 0) const pending = pendingPayments.value.reduce((total, payment) => total + Number(payment.amountUsd || 0), 0) - const cash = paidPayments.value.filter((payment) => ['manual', 'cash'].includes(payment.provider)).reduce((total, payment) => total + Number(payment.amountUsd || 0), 0) - const bitcoin = paidPayments.value.filter((payment) => payment.provider === 'btcpay').reduce((total, payment) => total + Number(payment.amountUsd || 0), 0) - const comp = paidPayments.value.filter((payment) => payment.provider === 'comp').reduce((total, payment) => total + Number(payment.amountUsd || 0), 0) + const cash = revenuePaidPayments.value.filter((payment) => ['manual', 'cash'].includes(payment.provider)).reduce((total, payment) => total + Number(payment.amountUsd || 0), 0) + const bitcoin = revenuePaidPayments.value.filter((payment) => payment.provider === 'btcpay').reduce((total, payment) => total + Number(payment.amountUsd || 0), 0) + const comp = compPayments.value.reduce((total, payment) => total + compedPaymentValue(payment), 0) return { paid, pending, cash, bitcoin, comp } }) const paymentMethodRows = computed(() => { const rows = [ - { label: 'Cash', value: paymentTotals.value.cash, count: paidPayments.value.filter((payment) => ['manual', 'cash'].includes(payment.provider)).length }, - { label: 'Bitcoin', value: paymentTotals.value.bitcoin, count: paidPayments.value.filter((payment) => payment.provider === 'btcpay').length }, - { label: 'Comp', value: paymentTotals.value.comp, count: paidPayments.value.filter((payment) => payment.provider === 'comp').length }, + { label: 'Cash', value: paymentTotals.value.cash, count: revenuePaidPayments.value.filter((payment) => ['manual', 'cash'].includes(payment.provider)).length }, + { label: 'Bitcoin', value: paymentTotals.value.bitcoin, count: revenuePaidPayments.value.filter((payment) => payment.provider === 'btcpay').length }, + { label: 'Comped', value: paymentTotals.value.comp, count: compPayments.value.length }, ] const max = Math.max(...rows.map((row) => row.value), 1) return rows.map((row) => ({ ...row, percentage: Math.max(4, Math.round((row.value / max) * 100)) })) @@ -336,7 +343,7 @@ const paymentTimelineRows = computed(() => { const key = date.toISOString().slice(0, 10) return { key, label: date.toLocaleDateString('en-US', { weekday: 'short' }), value: 0 } }) - paidPayments.value.forEach((payment) => { + revenuePaidPayments.value.forEach((payment) => { const key = String(payment.paidAt || payment.createdAt || '').slice(0, 10) const day = days.find((item) => item.key === key) if (day) day.value += Number(payment.amountUsd || 0) @@ -3230,7 +3237,7 @@ watch(mobileMenuOpen, (open) => {
Collected {{ formatUsd(paymentTotals.paid) }} -

{{ paidPayments.length }} paid

+

{{ revenuePaidPayments.length }} paid

Pending @@ -3247,6 +3254,11 @@ watch(mobileMenuOpen, (open) => { {{ formatUsd(paymentTotals.bitcoin) }}

BTCPay invoices

+
+ Comped + {{ formatUsd(paymentTotals.comp) }} +

{{ compPayments.length }} complimentary

+