mirror of
https://github.com/whekin/household-bot.git
synced 2026-03-31 13:54:02 +00:00
fix(miniapp): hide paid rent reminders on home
This commit is contained in:
@@ -23,6 +23,51 @@ import {
|
|||||||
parseCalendarDate
|
parseCalendarDate
|
||||||
} from '../lib/dates'
|
} from '../lib/dates'
|
||||||
import { submitMiniAppUtilityBill, addMiniAppPayment } from '../miniapp-api'
|
import { submitMiniAppUtilityBill, addMiniAppPayment } from '../miniapp-api'
|
||||||
|
import type { MiniAppDashboard } from '../miniapp-api'
|
||||||
|
|
||||||
|
function sumMemberPaymentsByKind(
|
||||||
|
data: MiniAppDashboard,
|
||||||
|
memberId: string,
|
||||||
|
kind: 'rent' | 'utilities'
|
||||||
|
): bigint {
|
||||||
|
return data.ledger.reduce((sum, entry) => {
|
||||||
|
if (entry.kind !== 'payment' || entry.memberId !== memberId || entry.paymentKind !== kind) {
|
||||||
|
return sum
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum + majorStringToMinor(entry.amountMajor)
|
||||||
|
}, 0n)
|
||||||
|
}
|
||||||
|
|
||||||
|
function paymentProposalMinor(
|
||||||
|
data: MiniAppDashboard,
|
||||||
|
member: MiniAppDashboard['members'][number],
|
||||||
|
kind: 'rent' | 'utilities'
|
||||||
|
): bigint {
|
||||||
|
const purchaseOffsetMinor = majorStringToMinor(member.purchaseOffsetMajor)
|
||||||
|
const baseMinor =
|
||||||
|
kind === 'rent'
|
||||||
|
? majorStringToMinor(member.rentShareMajor)
|
||||||
|
: majorStringToMinor(member.utilityShareMajor)
|
||||||
|
|
||||||
|
if (data.paymentBalanceAdjustmentPolicy === kind) {
|
||||||
|
return baseMinor + purchaseOffsetMinor
|
||||||
|
}
|
||||||
|
|
||||||
|
return baseMinor
|
||||||
|
}
|
||||||
|
|
||||||
|
function paymentRemainingMinor(
|
||||||
|
data: MiniAppDashboard,
|
||||||
|
member: MiniAppDashboard['members'][number],
|
||||||
|
kind: 'rent' | 'utilities'
|
||||||
|
): bigint {
|
||||||
|
const proposalMinor = paymentProposalMinor(data, member, kind)
|
||||||
|
const paidMinor = sumMemberPaymentsByKind(data, member.memberId, kind)
|
||||||
|
const remainingMinor = proposalMinor - paidMinor
|
||||||
|
|
||||||
|
return remainingMinor > 0n ? remainingMinor : 0n
|
||||||
|
}
|
||||||
|
|
||||||
export default function HomeRoute() {
|
export default function HomeRoute() {
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
@@ -160,7 +205,8 @@ export default function HomeRoute() {
|
|||||||
|
|
||||||
const homeMode = createMemo(() => {
|
const homeMode = createMemo(() => {
|
||||||
const data = dashboard()
|
const data = dashboard()
|
||||||
if (!data) return 'none' as const
|
const member = currentMemberLine()
|
||||||
|
if (!data || !member) return 'none' as const
|
||||||
const period = effectivePeriod() ?? data.period
|
const period = effectivePeriod() ?? data.period
|
||||||
const today = todayOverride()
|
const today = todayOverride()
|
||||||
|
|
||||||
@@ -178,15 +224,19 @@ export default function HomeRoute() {
|
|||||||
dueDay: data.rentDueDay,
|
dueDay: data.rentDueDay,
|
||||||
todayOverride: today
|
todayOverride: today
|
||||||
})
|
})
|
||||||
|
const utilitiesDueMinor = paymentRemainingMinor(data, member, 'utilities')
|
||||||
|
const rentDueMinor = paymentRemainingMinor(data, member, 'rent')
|
||||||
|
const utilitiesActive = utilities.active && utilitiesDueMinor > 0n
|
||||||
|
const rentActive = rent.active && rentDueMinor > 0n
|
||||||
|
|
||||||
if (utilities.active && rent.active) {
|
if (utilitiesActive && rentActive) {
|
||||||
const utilitiesDays = utilities.daysUntilDue ?? Number.POSITIVE_INFINITY
|
const utilitiesDays = utilities.daysUntilDue ?? Number.POSITIVE_INFINITY
|
||||||
const rentDays = rent.daysUntilDue ?? Number.POSITIVE_INFINITY
|
const rentDays = rent.daysUntilDue ?? Number.POSITIVE_INFINITY
|
||||||
return utilitiesDays <= rentDays ? ('utilities' as const) : ('rent' as const)
|
return utilitiesDays <= rentDays ? ('utilities' as const) : ('rent' as const)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (utilities.active) return 'utilities' as const
|
if (utilitiesActive) return 'utilities' as const
|
||||||
if (rent.active) return 'rent' as const
|
if (rentActive) return 'rent' as const
|
||||||
return 'none' as const
|
return 'none' as const
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -220,7 +270,7 @@ export default function HomeRoute() {
|
|||||||
if (!data || !currentMemberLine()) return
|
if (!data || !currentMemberLine()) return
|
||||||
|
|
||||||
const member = currentMemberLine()!
|
const member = currentMemberLine()!
|
||||||
const amount = type === 'rent' ? member.rentShareMajor : member.utilityShareMajor
|
const amount = minorToMajorString(paymentRemainingMinor(data, member, type))
|
||||||
|
|
||||||
setQuickPaymentType(type)
|
setQuickPaymentType(type)
|
||||||
setQuickPaymentAmount(amount)
|
setQuickPaymentAmount(amount)
|
||||||
@@ -311,17 +361,9 @@ export default function HomeRoute() {
|
|||||||
<Show when={currentMemberLine()}>
|
<Show when={currentMemberLine()}>
|
||||||
{(member) => {
|
{(member) => {
|
||||||
const policy = () => data().paymentBalanceAdjustmentPolicy
|
const policy = () => data().paymentBalanceAdjustmentPolicy
|
||||||
|
const rentRemainingMinor = () => paymentRemainingMinor(data(), member(), 'rent')
|
||||||
const rentBaseMinor = () => majorStringToMinor(member().rentShareMajor)
|
const utilitiesRemainingMinor = () =>
|
||||||
const utilitiesBaseMinor = () => majorStringToMinor(member().utilityShareMajor)
|
paymentRemainingMinor(data(), member(), 'utilities')
|
||||||
const purchaseOffsetMinor = () => majorStringToMinor(member().purchaseOffsetMajor)
|
|
||||||
|
|
||||||
const rentProposalMinor = () =>
|
|
||||||
policy() === 'rent' ? rentBaseMinor() + purchaseOffsetMinor() : rentBaseMinor()
|
|
||||||
const utilitiesProposalMinor = () =>
|
|
||||||
policy() === 'utilities'
|
|
||||||
? utilitiesBaseMinor() + purchaseOffsetMinor()
|
|
||||||
: utilitiesBaseMinor()
|
|
||||||
|
|
||||||
const mode = () => homeMode()
|
const mode = () => homeMode()
|
||||||
const currency = () => data().currency
|
const currency = () => data().currency
|
||||||
@@ -410,7 +452,7 @@ export default function HomeRoute() {
|
|||||||
<div class="balance-card__row balance-card__row--subtotal">
|
<div class="balance-card__row balance-card__row--subtotal">
|
||||||
<span>{copy().finalDue}</span>
|
<span>{copy().finalDue}</span>
|
||||||
<strong>
|
<strong>
|
||||||
{minorToMajorString(utilitiesProposalMinor())} {currency()}
|
{minorToMajorString(utilitiesRemainingMinor())} {currency()}
|
||||||
</strong>
|
</strong>
|
||||||
</div>
|
</div>
|
||||||
<div class="balance-card__row">
|
<div class="balance-card__row">
|
||||||
@@ -475,7 +517,7 @@ export default function HomeRoute() {
|
|||||||
<div class="balance-card__row balance-card__row--subtotal">
|
<div class="balance-card__row balance-card__row--subtotal">
|
||||||
<span>{copy().finalDue}</span>
|
<span>{copy().finalDue}</span>
|
||||||
<strong>
|
<strong>
|
||||||
{minorToMajorString(rentProposalMinor())} {currency()}
|
{minorToMajorString(rentRemainingMinor())} {currency()}
|
||||||
</strong>
|
</strong>
|
||||||
</div>
|
</div>
|
||||||
<div class="balance-card__row">
|
<div class="balance-card__row">
|
||||||
|
|||||||
Reference in New Issue
Block a user