Separate comped payment totals
This commit is contained in:
32
src/App.vue
32
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) => {
|
||||
<article class="payment-metric">
|
||||
<span>Collected</span>
|
||||
<strong>{{ formatUsd(paymentTotals.paid) }}</strong>
|
||||
<p>{{ paidPayments.length }} paid</p>
|
||||
<p>{{ revenuePaidPayments.length }} paid</p>
|
||||
</article>
|
||||
<article class="payment-metric">
|
||||
<span>Pending</span>
|
||||
@@ -3247,6 +3254,11 @@ watch(mobileMenuOpen, (open) => {
|
||||
<strong>{{ formatUsd(paymentTotals.bitcoin) }}</strong>
|
||||
<p>BTCPay invoices</p>
|
||||
</article>
|
||||
<article class="payment-metric">
|
||||
<span>Comped</span>
|
||||
<strong>{{ formatUsd(paymentTotals.comp) }}</strong>
|
||||
<p>{{ compPayments.length }} complimentary</p>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<div class="payment-dashboard-grid">
|
||||
|
||||
Reference in New Issue
Block a user