import { useState } from "react";
import { Button } from "@/Components/ui/button";
import { Input } from "@/Components/ui/input";
import { Label } from "@/Components/ui/label";
import {
BarChart3,
Download,
Calendar,
Filter,
TrendingDown,
Package,
Pocket,
RotateCcw,
FileText
} from 'lucide-react';
import AuthenticatedLayout from "@/Layouts/AuthenticatedLayout";
import { Head, router } from "@inertiajs/react";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/Components/ui/table";
import { getDateRange, formatDateWithDayOfWeek } from "@/utils/format";
import { Badge } from "@/Components/ui/badge";
import Pagination from "@/Components/shared/Pagination";
import { SearchableSelect } from "@/Components/ui/searchable-select";
import { Can } from "@/Components/Permission/Can";
interface Record {
id: string;
date: string;
source: string;
category: string;
item: string;
reference: string;
invoice_number?: string;
amount: number | string;
}
interface PageProps {
records: {
data: Record[];
links: any[];
total: number;
from: number;
to: number;
current_page: number;
};
summary: {
total_amount: number;
purchase_total: number;
utility_total: number;
record_count: number;
};
filters: {
date_start: string;
date_end: string;
per_page?: number;
};
}
export default function AccountingReport({ records, summary, filters }: PageProps) {
const [dateStart, setDateStart] = useState(filters.date_start);
const [dateEnd, setDateEnd] = useState(filters.date_end);
// Determine initial range type
const today = new Date().toISOString().split('T')[0];
const initialRangeType = (filters.date_start === today && filters.date_end === today) ? "today" : "custom";
const [dateRangeType, setDateRangeType] = useState(initialRangeType);
const [perPage, setPerPage] = useState(filters.per_page?.toString() || "10");
const handleDateRangeChange = (type: string) => {
setDateRangeType(type);
if (type === "custom") return;
const { start, end } = getDateRange(type);
setDateStart(start);
setDateEnd(end);
};
const handleFilter = () => {
router.get(
route("accounting.report"),
{
date_start: dateStart,
date_end: dateEnd,
per_page: perPage,
},
{ preserveState: true }
);
};
const handlePerPageChange = (value: string) => {
setPerPage(value);
router.get(
route("accounting.report"),
{
date_start: dateStart,
date_end: dateEnd,
per_page: value,
},
{ preserveState: true }
);
};
const handleClearFilters = () => {
setDateStart("");
setDateEnd("");
setPerPage("10");
router.get(route("accounting.report"), {}, { preserveState: false });
};
const handleExport = () => {
window.location.href = route("accounting.export", {
date_start: dateStart,
date_end: dateEnd,
});
};
return (
彙整採購支出與各項公用事業費用