import { AlertDialogAction, AlertDialogCancel, AlertDialogFooter } from "@/components/ui/alert-dialog" import { useAtom, useAtomValue } from "jotai" import { bankRecDateAtom, bankRecUnreconcileModalAtom, selectedBankAccountAtom } from "./bankRecAtoms" import { useMemo } from "react" import { useFrappeGetDoc, useFrappePostCall, useSWRConfig } from "frappe-react-sdk" import { BankTransaction } from "@/types/Accounts/BankTransaction" import { toast } from "sonner" import ErrorBanner from "@/components/ui/error-banner" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { formatCurrency } from "@/lib/numbers" import { Badge } from "@/components/ui/badge" import { slug } from "@/lib/frappe" import SelectedTransactionDetails from "./SelectedTransactionDetails" import _ from "@/lib/translate" const BankTransactionUnreconcileModalBody = () => { const bankAccount = useAtomValue(selectedBankAccountAtom) const dates = useAtomValue(bankRecDateAtom) const { mutate } = useSWRConfig() const [unreconcileModal, setBankRecUnreconcileModal] = useAtom(bankRecUnreconcileModalAtom) const { data: transaction, error, isLoading } = useFrappeGetDoc('Bank Transaction', unreconcileModal) const { call, loading, error: unreconcileError } = useFrappePostCall('erpnext.accounts.doctype.bank_transaction.bank_transaction.unreconcile_transaction') const onUnreconcile = (event: React.MouseEvent) => { call({ transaction_name: unreconcileModal }).then(() => { mutate(`bank-reconciliation-bank-transactions-${bankAccount?.name}-${dates.fromDate}-${dates.toDate}`) mutate(`bank-reconciliation-unreconciled-transactions-${bankAccount?.name}-${dates.fromDate}-${dates.toDate}`) mutate(`bank-reconciliation-account-closing-balance-${bankAccount?.name}-${dates.toDate}`) toast.success(_("Transaction Unreconciled")) setBankRecUnreconcileModal('') }) event.preventDefault() } const vouchersWhichWillBeCancelled = useMemo(() => { return transaction?.payment_entries?.filter((payment) => payment.reconciliation_type === 'Voucher Created') }, [transaction]) return ( <>
{error && } {unreconcileError && } {transaction && } {_("This transaction has been reconciled with the following document(s):")} {_("Document")} {_("Amount")} {_("Reconciliation Type")} {transaction?.payment_entries?.map((voucher) => { return ( {`${_(voucher.payment_document)}: ${voucher.payment_entry}`} {formatCurrency(voucher.allocated_amount)} {voucher.reconciliation_type === 'Voucher Created' ? {_(voucher.reconciliation_type)} : {_(voucher.reconciliation_type ?? "Matched")}} ) })}
{vouchersWhichWillBeCancelled && vouchersWhichWillBeCancelled?.length > 0 && ( The following documents will be cancelled: )} {vouchersWhichWillBeCancelled && vouchersWhichWillBeCancelled?.length > 0 && (
    {vouchersWhichWillBeCancelled?.map((voucher) => { return
  1. {_(voucher.payment_document)}: {voucher.payment_entry}
  2. })}
)}
{_("Cancel")} {_("Unreconcile")} ) } export default BankTransactionUnreconcileModalBody