'use client' import { useState, useEffect, useCallback } from 'react' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog' import { formatCurrency, formatDate } from '@/lib/utils' import { ArrowUpRight, ArrowDownRight, Check } from 'lucide-react' import { getDefaultAccountForCategory } from '@/lib/bookkeeping/category-mapping' import AccountCombobox from '@/components/bookkeeping/AccountCombobox' import VatTreatmentSelect from './VatTreatmentSelect' import type { TransactionWithInvoice } from './transaction-types' import type { TransactionCategory, VatTreatment, BASAccount } from '@/types' interface QuickReviewDialogProps { open: boolean onOpenChange: (open: boolean) => void transaction: TransactionWithInvoice | null category: TransactionCategory | null categoryLabel: string defaultAccount: string defaultVat: VatTreatment | 'none' onConfirm: ( id: string, category: TransactionCategory, vatTreatment: VatTreatment | undefined, accountOverride: string | undefined ) => Promise } export default function QuickReviewDialog({ open, onOpenChange, transaction, category, categoryLabel, defaultAccount, defaultVat, onConfirm, }: QuickReviewDialogProps) { const [accountOverride, setAccountOverride] = useState(defaultAccount) const [vatTreatment, setVatTreatment] = useState(defaultVat) const [accounts, setAccounts] = useState([]) const [isProcessing, setIsProcessing] = useState(false) const [error, setError] = useState(null) // Handle account changes — clear VAT for liability/equity accounts (class 2) const handleAccountChange = useCallback((account: string) => { setAccountOverride(account) if (account.startsWith('2')) { setVatTreatment('none') } }, []) // Fetch accounts on mount useEffect(() => { async function fetchAccounts() { try { const res = await fetch('/api/bookkeeping/accounts') const data = await res.json() if (data.accounts) { setAccounts(data.accounts) } } catch { // Non-critical } } fetchAccounts() }, []) if (!transaction || !category) return null const isIncome = transaction.amount > 0 const isLiabilityAccount = accountOverride.startsWith('2') async function handleConfirm() { if (!category || !transaction) return setIsProcessing(true) setError(null) try { const resolvedVat = vatTreatment === 'none' ? undefined : vatTreatment const catDefault = getDefaultAccountForCategory(category) const override = accountOverride && accountOverride !== catDefault ? accountOverride : undefined await onConfirm(transaction.id, category, resolvedVat, override) } catch { setError('Ett fel uppstod vid bokföring.') setIsProcessing(false) } } return ( Granska bokföring Kontrollera konto och moms innan du bokför {/* Transaction summary */}
{isIncome ? ( ) : ( )}

{transaction.description}

{formatDate(transaction.date)}

{isIncome ? '+' : ''} {formatCurrency(transaction.amount, transaction.currency)}

{/* Category (read-only) */}
{categoryLabel}
{/* Account */}
{/* VAT treatment */}
{isLiabilityAccount && (

Ingen moms för skuld-/eget kapital-konton

)}
{error && (
{error}
)} {/* Actions */}
) }