feat: accounting added

This commit is contained in:
2026-08-02 19:37:22 +03:30
parent cce279a60d
commit dd5b6d4616
10 changed files with 945 additions and 51 deletions
+1 -21
View File
@@ -15,7 +15,7 @@ import {
getPurchaseStatusLabel,
} from '@/types/purchase';
import { PackageName } from '@/types/package';
import { formatPrice, formatDate, getProductTypeLabel } from '@/lib/utils';
import { formatPrice, formatDate, getProductTypeLabel, getPurchaseFinalPrice } from '@/lib/utils';
import { MagnifyingGlassIcon, ArrowPathIcon } from '@heroicons/react/24/outline';
const statusBadgeClass = (status: number): string => {
@@ -37,26 +37,6 @@ const emptyFilters: PurchaseFilters = {
status: undefined,
};
// قیمت نهایی خرید (مبلغ قابل‌نمایش در جدول).
// وقتی محصول تخفیف دارد، مقدار نهایی همان «قیمت کلی تخفیف‌خورده» است؛
// اما در پکیج‌هایی که تخفیف ندارند، «قیمت» خود محصول مقدار نهایی است.
const getPurchaseFinalPrice = (purchase: Purchase): number => {
const product = purchase.product;
// اگر محصول تخفیف دارد، قیمت نهایی همان قیمت تخفیف‌خورده است
const discountedPrice = product?.discounted_price;
if (discountedPrice) {
const parsed = parseInt(discountedPrice.replace(/[^\d]/g, ''), 10);
if (!Number.isNaN(parsed) && parsed > 0) return parsed;
}
// بدون تخفیف → قیمت اصلی محصول (فقط وقتی discount نداشته باشد)
if (product?.price) return product.price;
// برگشت به مبلغ ثبت‌شدهٔ تراکنش وقتی محصول در دسترس نیست
return purchase.amount || 0;
};
export default function PurchasesPage() {
const { token } = useAuth();
const [packages, setPackages] = useState<PackageName[]>([]);