{{ paidPayments.length }} paid
+{{ revenuePaidPayments.length }} paid
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) => {
{{ paidPayments.length }} paid {{ revenuePaidPayments.length }} paid BTCPay invoices {{ compPayments.length }} complimentary