Updated all components to respect the billedToTenant flag: - LocationCard: Filter bills display and monthlyExpense calculation - ViewLocationCard: Filter bills display and monthlyExpense calculation - HomePage: Update monthlyExpense calculations for month grouping - printActions: Filter barcode print data to only include tenant bills All filtering uses (bill.billedToTenant ?? true) for backward compatibility with existing bills that don't have this property set. This ensures users only see and calculate expenses for bills that are the tenant's responsibility. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
76 lines
2.3 KiB
TypeScript
76 lines
2.3 KiB
TypeScript
import { fetchAllLocations } from '@/app/lib/actions/locationActions';
|
|
import { fetchAvailableYears } from '@/app/lib/actions/monthActions';
|
|
import { BillingLocation, YearMonth } from '@/app/lib/db-types';
|
|
import { FC } from 'react';
|
|
import { MonthLocationList } from '@/app/ui/MonthLocationList';
|
|
|
|
export interface HomePageProps {
|
|
searchParams?: {
|
|
year?: string;
|
|
month?: string;
|
|
};
|
|
}
|
|
|
|
export const HomePage:FC<HomePageProps> = async ({ searchParams }) => {
|
|
|
|
let availableYears: number[];
|
|
|
|
// const asyncTimout = (ms:number) => new Promise(resolve => setTimeout(resolve, ms));
|
|
// await asyncTimout(5000);
|
|
|
|
try {
|
|
availableYears = await fetchAvailableYears();
|
|
} catch (error:any) {
|
|
return (
|
|
<main className="flex min-h-screen flex-col p-6 bg-base-300">
|
|
<p className="text-center text-2xl text-red-500">{error.message}</p>
|
|
</main>);
|
|
}
|
|
|
|
// if the database is in it's initial state, show the add location button for the current month
|
|
if(availableYears.length === 0) {
|
|
return (<MonthLocationList />);
|
|
}
|
|
|
|
const currentYear = Number(searchParams?.year) || new Date().getFullYear();
|
|
|
|
const locations = await fetchAllLocations(currentYear);
|
|
|
|
// group locations by month
|
|
const months = locations.reduce((acc, location) => {
|
|
const {year, month} = location.yearMonth;
|
|
const key = `${year}-${month}`;
|
|
|
|
const locationsInMonth = acc[key];
|
|
|
|
if(locationsInMonth) {
|
|
return({
|
|
...acc,
|
|
[key]: {
|
|
yearMonth: location.yearMonth,
|
|
locations: [...locationsInMonth.locations, location],
|
|
monthlyExpense: locationsInMonth.monthlyExpense + location.bills.reduce((acc, bill) => (bill.paid && (bill.billedToTenant ?? true)) ? acc + (bill.payedAmount ?? 0) : acc, 0)
|
|
}
|
|
})
|
|
}
|
|
|
|
return({
|
|
...acc,
|
|
[key]: {
|
|
yearMonth: location.yearMonth,
|
|
locations: [location],
|
|
monthlyExpense: location.bills.reduce((acc, bill) => (bill.paid && (bill.billedToTenant ?? true)) ? acc + (bill.payedAmount ?? 0) : acc, 0)
|
|
}
|
|
});
|
|
}, {} as {[key:string]:{
|
|
yearMonth: YearMonth,
|
|
locations: BillingLocation[],
|
|
monthlyExpense: number
|
|
} });
|
|
|
|
return (
|
|
<MonthLocationList availableYears={availableYears} months={months} />
|
|
);
|
|
}
|
|
|
|
export default HomePage; |