From ecb32cf6cf4692c7466f97e5702507d3a8f5a38d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Mon, 15 Sep 2025 16:49:39 +0300 Subject: [PATCH] Container Accounting Management --- ui/src/views/accounting/BankPage.tsx | 168 ++--- ui/src/views/accounting/CashPage.tsx | 155 ++-- ui/src/views/accounting/CheckNotePage.tsx | 151 ++-- .../views/accounting/CurrentAccountPage.tsx | 25 +- ui/src/views/accounting/InvoicePage.tsx | 153 ++-- ui/src/views/accounting/WaybillPage.tsx | 113 ++- .../components/CheckNoteManagement.tsx | 683 ++++++++---------- 7 files changed, 650 insertions(+), 798 deletions(-) diff --git a/ui/src/views/accounting/BankPage.tsx b/ui/src/views/accounting/BankPage.tsx index 6f7e0b36..cec610fb 100644 --- a/ui/src/views/accounting/BankPage.tsx +++ b/ui/src/views/accounting/BankPage.tsx @@ -1,64 +1,61 @@ -import React, { useState, useEffect } from "react"; -import BankManagement from "./components/BankManagement"; -import BankAccountForm from "./components/BankAccountForm"; -import BankMovementForm from "./components/BankMovementForm"; -import BankAccountDetails from "./components/BankAccountDetails"; +import React, { useState, useEffect } from 'react' +import BankManagement from './components/BankManagement' +import BankAccountForm from './components/BankAccountForm' +import BankMovementForm from './components/BankMovementForm' +import BankAccountDetails from './components/BankAccountDetails' import { FiBankMovement, BankAccountTypeEnum, BankTransactionTypeEnum, TransactionStatusEnum, -} from "../../types/fi"; -import { mockBanks } from "../../mocks/mockBanks"; -import { mockBankMovements } from "../../mocks/mockBankMovements"; -import { BankAccount } from "../../types/common"; +} from '../../types/fi' +import { mockBanks } from '../../mocks/mockBanks' +import { mockBankMovements } from '../../mocks/mockBankMovements' +import { BankAccount } from '../../types/common' +import { Container } from '@/components/shared' const BankPage: React.FC = () => { - const [bankAccounts, setBankAccounts] = useState(mockBanks); - const [bankMovements, setBankMovements] = useState([]); + const [bankAccounts, setBankAccounts] = useState(mockBanks) + const [bankMovements, setBankMovements] = useState([]) // Initialize bank movements after bank accounts are set useEffect(() => { if (bankAccounts.length > 0) { - setBankMovements(mockBankMovements); + setBankMovements(mockBankMovements) } - }, [bankAccounts]); + }, [bankAccounts]) // Modal states - const [isAccountFormOpen, setIsAccountFormOpen] = useState(false); - const [isMovementFormOpen, setIsMovementFormOpen] = useState(false); - const [isAccountDetailsOpen, setIsAccountDetailsOpen] = useState(false); - const [selectedAccount, setSelectedAccount] = useState< - BankAccount | undefined - >(undefined); - const [selectedMovement, setSelectedMovement] = useState< - FiBankMovement | undefined - >(undefined); + const [isAccountFormOpen, setIsAccountFormOpen] = useState(false) + const [isMovementFormOpen, setIsMovementFormOpen] = useState(false) + const [isAccountDetailsOpen, setIsAccountDetailsOpen] = useState(false) + const [selectedAccount, setSelectedAccount] = useState(undefined) + const [selectedMovement, setSelectedMovement] = useState(undefined) const handleAddAccount = () => { - setSelectedAccount(undefined); - setIsAccountFormOpen(true); - }; + setSelectedAccount(undefined) + setIsAccountFormOpen(true) + } const handleEditAccount = (account: BankAccount) => { - setSelectedAccount(account); - setIsAccountFormOpen(true); - }; + setSelectedAccount(account) + setIsAccountFormOpen(true) + } const handleAddMovement = () => { - setSelectedMovement(undefined); - setIsMovementFormOpen(true); - }; + setSelectedMovement(undefined) + setIsMovementFormOpen(true) + } const handleEditMovement = (movement: FiBankMovement) => { - setSelectedMovement(movement); - setIsMovementFormOpen(true); - }; + setSelectedMovement(movement) + setIsMovementFormOpen(true) + } const handleViewDetails = (account: BankAccount) => { - setSelectedAccount(account); - setIsAccountDetailsOpen(true); - }; + setSelectedAccount(account) + setIsAccountDetailsOpen(true) + } const handleSaveAccount = (accountData: Partial) => { if (selectedAccount) { @@ -67,20 +64,20 @@ const BankPage: React.FC = () => { prev.map((acc) => acc.id === selectedAccount.id ? { ...acc, ...accountData, lastModificationTime: new Date() } - : acc - ) - ); + : acc, + ), + ) } else { // Add new account const newAccount: BankAccount = { id: Date.now().toString(), - accountCode: accountData.accountCode || "", - bankName: accountData.bankName || "", - branchName: accountData.branchName || "", - accountNumber: accountData.accountNumber || "", - iban: accountData.iban || "", + accountCode: accountData.accountCode || '', + bankName: accountData.bankName || '', + branchName: accountData.branchName || '', + accountNumber: accountData.accountNumber || '', + iban: accountData.iban || '', accountType: accountData.accountType || BankAccountTypeEnum.Current, - currency: accountData.currency || "TRY", + currency: accountData.currency || 'TRY', balance: accountData.balance || 0, overdraftLimit: accountData.overdraftLimit || 0, dailyTransferLimit: accountData.dailyTransferLimit || 0, @@ -90,66 +87,61 @@ const BankPage: React.FC = () => { creationTime: new Date(), lastModificationTime: new Date(), isDefault: false, - }; - setBankAccounts((prev) => [...prev, newAccount]); + } + setBankAccounts((prev) => [...prev, newAccount]) } - setIsAccountFormOpen(false); - setSelectedAccount(undefined); - }; + setIsAccountFormOpen(false) + setSelectedAccount(undefined) + } const handleSaveMovement = (movementData: Partial) => { if (selectedMovement) { // Update existing movement setBankMovements((prev) => - prev.map((mov) => - mov.id === selectedMovement.id ? { ...mov, ...movementData } : mov - ) - ); + prev.map((mov) => (mov.id === selectedMovement.id ? { ...mov, ...movementData } : mov)), + ) } else { // Add new movement - const bankAccount = bankAccounts.find( - (acc) => acc.id === movementData.bankAccountId - ); + const bankAccount = bankAccounts.find((acc) => acc.id === movementData.bankAccountId) const newMovement: FiBankMovement = { id: Date.now().toString(), - bankAccountId: movementData.bankAccountId || "", + bankAccountId: movementData.bankAccountId || '', bankAccount: bankAccount, transactionDate: movementData.transactionDate || new Date(), valueDate: movementData.valueDate || new Date(), - description: movementData.description || "", + description: movementData.description || '', referenceNumber: movementData.referenceNumber, - transactionType: - movementData.transactionType || BankTransactionTypeEnum.Deposit, + transactionType: movementData.transactionType || BankTransactionTypeEnum.Deposit, amount: movementData.amount || 0, - currency: movementData.currency || "TRY", + currency: movementData.currency || 'TRY', recipientName: movementData.recipientName, recipientIban: movementData.recipientIban, recipientBank: movementData.recipientBank, currentAccountId: movementData.currentAccountId, status: movementData.status || TransactionStatusEnum.Pending, creationTime: new Date(), - }; - setBankMovements((prev) => [...prev, newMovement]); + } + setBankMovements((prev) => [...prev, newMovement]) // Update account balance if (bankAccount) { const isIncoming = [ BankTransactionTypeEnum.Deposit, BankTransactionTypeEnum.Interest, - ].includes(newMovement.transactionType); + ].includes(newMovement.transactionType) const isOutgoing = [ BankTransactionTypeEnum.Withdrawal, BankTransactionTypeEnum.Transfer, BankTransactionTypeEnum.EFT, BankTransactionTypeEnum.Fee, - ].includes(newMovement.transactionType); + ].includes(newMovement.transactionType) if (newMovement.status === TransactionStatusEnum.Completed) { const balanceChange = isIncoming ? newMovement.amount : isOutgoing - ? -newMovement.amount - : 0; + ? -newMovement.amount + : 0 setBankAccounts((prev) => prev.map((acc) => acc.id === bankAccount.id @@ -158,18 +150,18 @@ const BankPage: React.FC = () => { balance: acc.balance + balanceChange, lastModificationTime: new Date(), } - : acc - ) - ); + : acc, + ), + ) } } } - setIsMovementFormOpen(false); - setSelectedMovement(undefined); - }; + setIsMovementFormOpen(false) + setSelectedMovement(undefined) + } return ( - <> + { account={selectedAccount} isOpen={isAccountFormOpen} onClose={() => { - setIsAccountFormOpen(false); - setSelectedAccount(undefined); + setIsAccountFormOpen(false) + setSelectedAccount(undefined) }} onSave={handleSaveAccount} /> @@ -197,8 +189,8 @@ const BankPage: React.FC = () => { bankAccounts={bankAccounts} isOpen={isMovementFormOpen} onClose={() => { - setIsMovementFormOpen(false); - setSelectedMovement(undefined); + setIsMovementFormOpen(false) + setSelectedMovement(undefined) }} onSave={handleSaveMovement} /> @@ -210,17 +202,17 @@ const BankPage: React.FC = () => { movements={bankMovements} isOpen={isAccountDetailsOpen} onClose={() => { - setIsAccountDetailsOpen(false); - setSelectedAccount(undefined); + setIsAccountDetailsOpen(false) + setSelectedAccount(undefined) }} onEdit={(account) => { - setIsAccountDetailsOpen(false); - handleEditAccount(account); + setIsAccountDetailsOpen(false) + handleEditAccount(account) }} /> )} - - ); -}; + + ) +} -export default BankPage; +export default BankPage diff --git a/ui/src/views/accounting/CashPage.tsx b/ui/src/views/accounting/CashPage.tsx index caa94af1..6fc51f1e 100644 --- a/ui/src/views/accounting/CashPage.tsx +++ b/ui/src/views/accounting/CashPage.tsx @@ -1,91 +1,78 @@ -import React, { useState } from "react"; -import CashManagement from "./components/CashManagement"; -import CashAccountForm from "./components/CashAccountForm"; -import CashMovementForm from "./components/CashMovementForm"; -import CashAccountDetails from "./components/CashAccountDetails"; -import { - FiCashAccount, - FiCashMovement, - CashMovementTypeEnum, -} from "../../types/fi"; -import { mockCashAccounts } from "../../mocks/mockCashAccounts"; -import { mockCashMovements } from "../../mocks/mockCashMovements"; +import React, { useState } from 'react' +import CashManagement from './components/CashManagement' +import CashAccountForm from './components/CashAccountForm' +import CashMovementForm from './components/CashMovementForm' +import CashAccountDetails from './components/CashAccountDetails' +import { FiCashAccount, FiCashMovement, CashMovementTypeEnum } from '../../types/fi' +import { mockCashAccounts } from '../../mocks/mockCashAccounts' +import { mockCashMovements } from '../../mocks/mockCashMovements' +import { Container } from '@/components/shared' const CashPage: React.FC = () => { - const [showAccountForm, setShowAccountForm] = useState(false); - const [showMovementForm, setShowMovementForm] = useState(false); - const [showAccountDetails, setShowAccountDetails] = useState(false); - const [editingAccount, setEditingAccount] = useState< - FiCashAccount | undefined - >(); - const [editingMovement, setEditingMovement] = useState< - FiCashMovement | undefined - >(); - const [viewingAccount, setViewingAccount] = useState< - FiCashAccount | undefined - >(); - const [cashAccounts, setCashAccounts] = useState(mockCashAccounts); - const [cashMovements, setCashMovements] = useState(mockCashMovements); + const [showAccountForm, setShowAccountForm] = useState(false) + const [showMovementForm, setShowMovementForm] = useState(false) + const [showAccountDetails, setShowAccountDetails] = useState(false) + const [editingAccount, setEditingAccount] = useState() + const [editingMovement, setEditingMovement] = useState() + const [viewingAccount, setViewingAccount] = useState() + const [cashAccounts, setCashAccounts] = useState(mockCashAccounts) + const [cashMovements, setCashMovements] = useState(mockCashMovements) const handleAddAccount = () => { - setEditingAccount(undefined); - setShowAccountForm(true); - }; + setEditingAccount(undefined) + setShowAccountForm(true) + } const handleEditAccount = (account: FiCashAccount) => { - setEditingAccount(account); - setShowAccountForm(true); - }; + setEditingAccount(account) + setShowAccountForm(true) + } - const handleSaveAccount = (accountData: Omit) => { + const handleSaveAccount = (accountData: Omit) => { if (editingAccount) { // Update existing account setCashAccounts((prev) => prev.map((acc) => - acc.id === editingAccount.id - ? { ...accountData, id: editingAccount.id } - : acc - ) - ); + acc.id === editingAccount.id ? { ...accountData, id: editingAccount.id } : acc, + ), + ) } else { // Add new account const newAccount: FiCashAccount = { ...accountData, id: Date.now().toString(), - }; - setCashAccounts((prev) => [...prev, newAccount]); + } + setCashAccounts((prev) => [...prev, newAccount]) } - setShowAccountForm(false); - setEditingAccount(undefined); - }; + setShowAccountForm(false) + setEditingAccount(undefined) + } const handleAddMovement = () => { - setEditingMovement(undefined); - setShowMovementForm(true); - }; + setEditingMovement(undefined) + setShowMovementForm(true) + } const handleEditMovement = (movement: FiCashMovement) => { - setEditingMovement(movement); - setShowMovementForm(true); - }; + setEditingMovement(movement) + setShowMovementForm(true) + } - const handleSaveMovement = (movementData: Omit) => { + const handleSaveMovement = (movementData: Omit) => { if (editingMovement) { // Update existing movement setCashMovements((prev) => prev.map((mov) => - mov.id === editingMovement.id - ? { ...movementData, id: editingMovement.id } - : mov - ) - ); + mov.id === editingMovement.id ? { ...movementData, id: editingMovement.id } : mov, + ), + ) } else { // Add new movement const newMovement: FiCashMovement = { ...movementData, id: Date.now().toString(), - }; - setCashMovements((prev) => [...prev, newMovement]); + } + setCashMovements((prev) => [...prev, newMovement]) } // Update cash account balance @@ -96,44 +83,44 @@ const CashPage: React.FC = () => { const balanceChange = movementData.movementType === CashMovementTypeEnum.Income ? movementData.amount - : -movementData.amount; + : -movementData.amount return { ...acc, balance: acc.balance + balanceChange, lastModificationTime: new Date(), - }; + } } - return acc; - }) - ); + return acc + }), + ) } - setShowMovementForm(false); - setEditingMovement(undefined); - }; + setShowMovementForm(false) + setEditingMovement(undefined) + } const handleViewDetails = (account: FiCashAccount) => { - setViewingAccount(account); - setShowAccountDetails(true); - }; + setViewingAccount(account) + setShowAccountDetails(true) + } const handleCloseAccountForm = () => { - setShowAccountForm(false); - setEditingAccount(undefined); - }; + setShowAccountForm(false) + setEditingAccount(undefined) + } const handleCloseMovementForm = () => { - setShowMovementForm(false); - setEditingMovement(undefined); - }; + setShowMovementForm(false) + setEditingMovement(undefined) + } const handleCloseAccountDetails = () => { - setShowAccountDetails(false); - setViewingAccount(undefined); - }; + setShowAccountDetails(false) + setViewingAccount(undefined) + } return ( - <> + { movements={cashMovements} onClose={handleCloseAccountDetails} onEdit={(account) => { - setShowAccountDetails(false); - handleEditAccount(account); + setShowAccountDetails(false) + handleEditAccount(account) }} /> )} - - ); -}; + + ) +} -export default CashPage; +export default CashPage diff --git a/ui/src/views/accounting/CheckNotePage.tsx b/ui/src/views/accounting/CheckNotePage.tsx index e61e5ab8..f752f456 100644 --- a/ui/src/views/accounting/CheckNotePage.tsx +++ b/ui/src/views/accounting/CheckNotePage.tsx @@ -1,79 +1,64 @@ -import React, { useState } from "react"; -import CheckNoteManagement from "./components/CheckNoteManagement"; -import { - FiCheck, - PromissoryNote, - CheckStatusEnum, - NoteStatusEnum, -} from "../../types/fi"; -import { mockChecks } from "../../mocks/mockChecks"; -import { mockPromissoryNotes } from "../../mocks/mockPromissoryNotes"; -import { mockCurrentAccounts } from "../../mocks/mockCurrentAccounts"; +import React, { useState } from 'react' +import CheckNoteManagement from './components/CheckNoteManagement' +import { FiCheck, PromissoryNote, CheckStatusEnum, NoteStatusEnum } from '../../types/fi' +import { mockChecks } from '../../mocks/mockChecks' +import { mockPromissoryNotes } from '../../mocks/mockPromissoryNotes' +import { mockCurrentAccounts } from '../../mocks/mockCurrentAccounts' +import { Container } from '@/components/shared' const CheckNotePage: React.FC = () => { - const [checks, setChecks] = useState(mockChecks); - const [promissoryNotes, setPromissoryNotes] = - useState(mockPromissoryNotes); + const [checks, setChecks] = useState(mockChecks) + const [promissoryNotes, setPromissoryNotes] = useState(mockPromissoryNotes) const handleAddCheck = ( - checkData: Omit + checkData: Omit, ) => { const newCheck: FiCheck = { ...checkData, id: `check_${Date.now()}`, creationTime: new Date(), lastModificationTime: new Date(), - }; - setChecks((prev) => [...prev, newCheck]); - console.log("Check added:", newCheck); - }; + } + setChecks((prev) => [...prev, newCheck]) + console.log('Check added:', newCheck) + } const handleEditCheck = ( id: string, - checkData: Omit + checkData: Omit, ) => { setChecks((prev) => prev.map((check) => - check.id === id - ? { ...check, ...checkData, lastModificationTime: new Date() } - : check - ) - ); - console.log("Check updated:", id, checkData); - }; + check.id === id ? { ...check, ...checkData, lastModificationTime: new Date() } : check, + ), + ) + console.log('Check updated:', id, checkData) + } const handleAddNote = ( - noteData: Omit< - PromissoryNote, - "id" | "creationTime" | "lastModificationTime" - > + noteData: Omit, ) => { const newNote: PromissoryNote = { ...noteData, id: `note_${Date.now()}`, creationTime: new Date(), lastModificationTime: new Date(), - }; - setPromissoryNotes((prev) => [...prev, newNote]); - console.log("Promissory note added:", newNote); - }; + } + setPromissoryNotes((prev) => [...prev, newNote]) + console.log('Promissory note added:', newNote) + } const handleEditNote = ( id: string, - noteData: Omit< - PromissoryNote, - "id" | "creationTime" | "lastModificationTime" - > + noteData: Omit, ) => { setPromissoryNotes((prev) => prev.map((note) => - note.id === id - ? { ...note, ...noteData, lastModificationTime: new Date() } - : note - ) - ); - console.log("Promissory note updated:", id, noteData); - }; + note.id === id ? { ...note, ...noteData, lastModificationTime: new Date() } : note, + ), + ) + console.log('Promissory note updated:', id, noteData) + } const handleCollectCheck = (id: string, collectionDate: Date) => { setChecks((prev) => @@ -85,11 +70,11 @@ const CheckNotePage: React.FC = () => { collectionDate, lastModificationTime: new Date(), } - : check - ) - ); - console.log("Check collected:", id, collectionDate); - }; + : check, + ), + ) + console.log('Check collected:', id, collectionDate) + } const handleCollectNote = (id: string, collectionDate: Date) => { setPromissoryNotes((prev) => @@ -101,11 +86,11 @@ const CheckNotePage: React.FC = () => { collectionDate, lastModificationTime: new Date(), } - : note - ) - ); - console.log("Promissory note collected:", id, collectionDate); - }; + : note, + ), + ) + console.log('Promissory note collected:', id, collectionDate) + } const handleEndorseCheck = (id: string, endorsedTo: string) => { setChecks((prev) => @@ -117,11 +102,11 @@ const CheckNotePage: React.FC = () => { endorsedTo, lastModificationTime: new Date(), } - : check - ) - ); - console.log("Check endorsed:", id, endorsedTo); - }; + : check, + ), + ) + console.log('Check endorsed:', id, endorsedTo) + } const handleEndorseNote = (id: string, endorsedTo: string) => { setPromissoryNotes((prev) => @@ -133,27 +118,29 @@ const CheckNotePage: React.FC = () => { endorsedTo, lastModificationTime: new Date(), } - : note - ) - ); - console.log("Promissory note endorsed:", id, endorsedTo); - }; + : note, + ), + ) + console.log('Promissory note endorsed:', id, endorsedTo) + } return ( - - ); -}; + + + + ) +} -export default CheckNotePage; +export default CheckNotePage diff --git a/ui/src/views/accounting/CurrentAccountPage.tsx b/ui/src/views/accounting/CurrentAccountPage.tsx index 4571f994..29c9712e 100644 --- a/ui/src/views/accounting/CurrentAccountPage.tsx +++ b/ui/src/views/accounting/CurrentAccountPage.tsx @@ -1,15 +1,18 @@ -import React from "react"; -import CurrentAccountManagement from "./components/CurrentAccountManagement"; -import { mockCurrentAccounts } from "../../mocks/mockCurrentAccounts"; -import { mockCurrentAccountMovements } from "../../mocks/mockCurrentAccountMovements"; +import React from 'react' +import CurrentAccountManagement from './components/CurrentAccountManagement' +import { mockCurrentAccounts } from '../../mocks/mockCurrentAccounts' +import { mockCurrentAccountMovements } from '../../mocks/mockCurrentAccountMovements' +import { Container } from '@/components/shared' const CurrentAccountPage: React.FC = () => { return ( - - ); -}; + + + + ) +} -export default CurrentAccountPage; +export default CurrentAccountPage diff --git a/ui/src/views/accounting/InvoicePage.tsx b/ui/src/views/accounting/InvoicePage.tsx index af827364..c0f49ad8 100644 --- a/ui/src/views/accounting/InvoicePage.tsx +++ b/ui/src/views/accounting/InvoicePage.tsx @@ -1,58 +1,53 @@ -import React, { useState } from "react"; -import InvoiceManagement from "./components/InvoiceManagement"; -import InvoiceForm from "./components/InvoiceForm"; -import InvoiceDetails from "./components/InvoiceDetails"; -import PaymentForm from "./components/PaymentForm"; -import WaybillToInvoice from "./components/WaybillToInvoice"; -import { - FiInvoice, - PaymentMethodEnum, - PaymentStatusEnum, -} from "../../types/fi"; -import { mockInvoices } from "../../mocks/mockInvoices"; +import React, { useState } from 'react' +import InvoiceManagement from './components/InvoiceManagement' +import InvoiceForm from './components/InvoiceForm' +import InvoiceDetails from './components/InvoiceDetails' +import PaymentForm from './components/PaymentForm' +import WaybillToInvoice from './components/WaybillToInvoice' +import { FiInvoice, PaymentMethodEnum, PaymentStatusEnum } from '../../types/fi' +import { mockInvoices } from '../../mocks/mockInvoices' +import { Container } from '@/components/shared' interface PaymentData { - amount: number; - paymentDate: Date; - paymentMethod: PaymentMethodEnum; - description: string; - referenceNumber?: string; + amount: number + paymentDate: Date + paymentMethod: PaymentMethodEnum + description: string + referenceNumber?: string } const InvoicePage: React.FC = () => { - const [invoices, setInvoices] = useState(mockInvoices); - const [showInvoiceForm, setShowInvoiceForm] = useState(false); - const [showInvoiceDetails, setShowInvoiceDetails] = useState(false); - const [showPaymentForm, setShowPaymentForm] = useState(false); - const [showWaybillToInvoice, setShowWaybillToInvoice] = useState(false); - const [selectedInvoice, setSelectedInvoice] = useState( - null - ); - const [editingInvoice, setEditingInvoice] = useState(null); + const [invoices, setInvoices] = useState(mockInvoices) + const [showInvoiceForm, setShowInvoiceForm] = useState(false) + const [showInvoiceDetails, setShowInvoiceDetails] = useState(false) + const [showPaymentForm, setShowPaymentForm] = useState(false) + const [showWaybillToInvoice, setShowWaybillToInvoice] = useState(false) + const [selectedInvoice, setSelectedInvoice] = useState(null) + const [editingInvoice, setEditingInvoice] = useState(null) const handleAdd = () => { - setEditingInvoice(null); - setShowInvoiceForm(true); - }; + setEditingInvoice(null) + setShowInvoiceForm(true) + } const handleEdit = (invoice: FiInvoice) => { - setEditingInvoice(invoice); - setShowInvoiceForm(true); - }; + setEditingInvoice(invoice) + setShowInvoiceForm(true) + } const handleCreatePayment = (invoice: FiInvoice) => { - setSelectedInvoice(invoice); - setShowPaymentForm(true); - }; + setSelectedInvoice(invoice) + setShowPaymentForm(true) + } const handleViewDetails = (invoice: FiInvoice) => { - setSelectedInvoice(invoice); - setShowInvoiceDetails(true); - }; + setSelectedInvoice(invoice) + setShowInvoiceDetails(true) + } const handleConvertFromWaybill = () => { - setShowWaybillToInvoice(true); - }; + setShowWaybillToInvoice(true) + } const handleSaveInvoice = (invoiceData: Partial) => { if (editingInvoice) { @@ -61,9 +56,9 @@ const InvoicePage: React.FC = () => { prev.map((inv) => inv.id === editingInvoice.id ? { ...inv, ...invoiceData, lastModificationTime: new Date() } - : inv - ) - ); + : inv, + ), + ) } else { // Yeni ekleme const newInvoice: FiInvoice = { @@ -71,15 +66,15 @@ const InvoicePage: React.FC = () => { creationTime: new Date(), lastModificationTime: new Date(), ...invoiceData, - } as FiInvoice; - setInvoices((prev) => [newInvoice, ...prev]); + } as FiInvoice + setInvoices((prev) => [newInvoice, ...prev]) } - setShowInvoiceForm(false); - setEditingInvoice(null); - }; + setShowInvoiceForm(false) + setEditingInvoice(null) + } const handleSavePayment = (paymentData: PaymentData) => { - if (!selectedInvoice) return; + if (!selectedInvoice) return // Ödeme bilgilerini faturaya ekle const updatedInvoice = { @@ -91,50 +86,48 @@ const InvoicePage: React.FC = () => { ? PaymentStatusEnum.Paid : PaymentStatusEnum.PartiallyPaid, lastModificationTime: new Date(), - }; + } - setInvoices((prev) => - prev.map((inv) => (inv.id === selectedInvoice.id ? updatedInvoice : inv)) - ); + setInvoices((prev) => prev.map((inv) => (inv.id === selectedInvoice.id ? updatedInvoice : inv))) - setShowPaymentForm(false); - setSelectedInvoice(null); + setShowPaymentForm(false) + setSelectedInvoice(null) // Başarı mesajı alert( - `${paymentData.amount.toLocaleString("tr-TR", { - style: "currency", - currency: "TRY", - })} tutarında ödeme kaydedildi.` - ); - }; + `${paymentData.amount.toLocaleString('tr-TR', { + style: 'currency', + currency: 'TRY', + })} tutarında ödeme kaydedildi.`, + ) + } const handleSaveFromWaybill = () => { - setShowWaybillToInvoice(false); - alert("İrsaliyelerden fatura başarıyla oluşturuldu."); - }; + setShowWaybillToInvoice(false) + alert('İrsaliyelerden fatura başarıyla oluşturuldu.') + } const handleCancelForm = () => { - setShowInvoiceForm(false); - setEditingInvoice(null); - }; + setShowInvoiceForm(false) + setEditingInvoice(null) + } const handleCancelDetails = () => { - setShowInvoiceDetails(false); - setSelectedInvoice(null); - }; + setShowInvoiceDetails(false) + setSelectedInvoice(null) + } const handleCancelPayment = () => { - setShowPaymentForm(false); - setSelectedInvoice(null); - }; + setShowPaymentForm(false) + setSelectedInvoice(null) + } const handleCancelWaybillToInvoice = () => { - setShowWaybillToInvoice(false); - }; + setShowWaybillToInvoice(false) + } return ( - <> + { onInvoiceCreated={handleSaveFromWaybill} isVisible={showWaybillToInvoice} /> - - ); -}; + + ) +} -export default InvoicePage; +export default InvoicePage diff --git a/ui/src/views/accounting/WaybillPage.tsx b/ui/src/views/accounting/WaybillPage.tsx index 5bfeef90..78d812f8 100644 --- a/ui/src/views/accounting/WaybillPage.tsx +++ b/ui/src/views/accounting/WaybillPage.tsx @@ -1,39 +1,38 @@ -import React, { useState } from "react"; -import WaybillManagement from "./components/WaybillManagement"; -import WaybillForm from "./components/WaybillForm"; -import WaybillDetails from "./components/WaybillDetails"; -import WaybillToInvoice from "./components/WaybillToInvoice"; -import { FiWaybill, WaybillStatusEnum } from "../../types/fi"; -import { mockWaybills } from "../../mocks/mockWaybills"; +import React, { useState } from 'react' +import WaybillManagement from './components/WaybillManagement' +import WaybillForm from './components/WaybillForm' +import WaybillDetails from './components/WaybillDetails' +import WaybillToInvoice from './components/WaybillToInvoice' +import { FiWaybill, WaybillStatusEnum } from '../../types/fi' +import { mockWaybills } from '../../mocks/mockWaybills' +import { Container } from '@/components/shared' -type ViewType = "management" | "form" | "details" | "createInvoice"; +type ViewType = 'management' | 'form' | 'details' | 'createInvoice' const WaybillPage: React.FC = () => { - const [currentView, setCurrentView] = useState("management"); - const [waybills, setWaybills] = useState(mockWaybills); - const [selectedWaybill, setSelectedWaybill] = useState< - FiWaybill | undefined - >(); + const [currentView, setCurrentView] = useState('management') + const [waybills, setWaybills] = useState(mockWaybills) + const [selectedWaybill, setSelectedWaybill] = useState() const handleAdd = () => { - setSelectedWaybill(undefined); - setCurrentView("form"); - }; + setSelectedWaybill(undefined) + setCurrentView('form') + } const handleEdit = (waybill: FiWaybill) => { - setSelectedWaybill(waybill); - setCurrentView("form"); - }; + setSelectedWaybill(waybill) + setCurrentView('form') + } const handleViewDetails = (waybill: FiWaybill) => { - setSelectedWaybill(waybill); - setCurrentView("details"); - }; + setSelectedWaybill(waybill) + setCurrentView('details') + } const handleCreateInvoice = (waybill: FiWaybill) => { - setSelectedWaybill(waybill); - setCurrentView("createInvoice"); - }; + setSelectedWaybill(waybill) + setCurrentView('createInvoice') + } const handleMarkAsDelivered = (waybill: FiWaybill) => { setWaybills((prev) => @@ -44,13 +43,11 @@ const WaybillPage: React.FC = () => { status: WaybillStatusEnum.Delivered, lastModificationTime: new Date(), } - : w - ) - ); - alert( - `${waybill.waybillNumber} numaralı irsaliye teslim edildi olarak işaretlendi.` - ); - }; + : w, + ), + ) + alert(`${waybill.waybillNumber} numaralı irsaliye teslim edildi olarak işaretlendi.`) + } const handleSaveWaybill = (waybillData: Partial) => { if (selectedWaybill) { @@ -62,9 +59,9 @@ const WaybillPage: React.FC = () => { ...waybillData, lastModificationTime: new Date(), } - : w - ); - setWaybills(updatedWaybills); + : w, + ) + setWaybills(updatedWaybills) } else { // Create new waybill const newWaybill: FiWaybill = { @@ -72,17 +69,17 @@ const WaybillPage: React.FC = () => { id: Date.now().toString(), creationTime: new Date(), lastModificationTime: new Date(), - }; - setWaybills([...waybills, newWaybill]); + } + setWaybills([...waybills, newWaybill]) } - setCurrentView("management"); - setSelectedWaybill(undefined); - }; + setCurrentView('management') + setSelectedWaybill(undefined) + } const handleCancel = () => { - setCurrentView("management"); - setSelectedWaybill(undefined); - }; + setCurrentView('management') + setSelectedWaybill(undefined) + } const handleInvoiceCreated = () => { // Mark waybill as invoiced @@ -90,17 +87,17 @@ const WaybillPage: React.FC = () => { const updatedWaybills = waybills.map((w) => w.id === selectedWaybill.id ? { ...w, isInvoiced: true, lastModificationTime: new Date() } - : w - ); - setWaybills(updatedWaybills); + : w, + ) + setWaybills(updatedWaybills) } - setCurrentView("management"); - setSelectedWaybill(undefined); - }; + setCurrentView('management') + setSelectedWaybill(undefined) + } return ( - <> - {currentView === "management" && ( + + {currentView === 'management' && ( { waybill={selectedWaybill} onSave={handleSaveWaybill} onCancel={handleCancel} - isVisible={currentView === "form"} + isVisible={currentView === 'form'} /> {selectedWaybill && ( @@ -123,7 +120,7 @@ const WaybillPage: React.FC = () => { waybill={selectedWaybill} onClose={handleCancel} onCreateInvoice={() => handleCreateInvoice(selectedWaybill)} - isVisible={currentView === "details"} + isVisible={currentView === 'details'} /> )} @@ -132,11 +129,11 @@ const WaybillPage: React.FC = () => { selectedWaybills={[selectedWaybill.id]} onClose={handleCancel} onInvoiceCreated={handleInvoiceCreated} - isVisible={currentView === "createInvoice"} + isVisible={currentView === 'createInvoice'} /> )} - - ); -}; + + ) +} -export default WaybillPage; +export default WaybillPage diff --git a/ui/src/views/accounting/components/CheckNoteManagement.tsx b/ui/src/views/accounting/components/CheckNoteManagement.tsx index 1cbd9747..72534824 100644 --- a/ui/src/views/accounting/components/CheckNoteManagement.tsx +++ b/ui/src/views/accounting/components/CheckNoteManagement.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState } from 'react' import { FaCreditCard, FaFileAlt, @@ -9,7 +9,7 @@ import { FaEdit, FaMoneyBillWave, FaSignature, -} from "react-icons/fa"; +} from 'react-icons/fa' import { FiCheck, PromissoryNote, @@ -18,37 +18,33 @@ import { CheckTypeEnum, NoteTypeEnum, FiCurrentAccount, -} from "../../../types/fi"; -import DataTable, { Column } from "../../../components/common/DataTable"; -import CheckForm from "./CheckForm"; -import PromissoryNoteForm from "./PromissoryNoteForm"; -import CheckNoteDetails from "./CheckNoteDetails"; -import CollectionDialog from "./CollectionDialog"; -import EndorsementDialog from "./EndorsementDialog"; -import Widget from "../../../components/common/Widget"; +} from '../../../types/fi' +import DataTable, { Column } from '../../../components/common/DataTable' +import CheckForm from './CheckForm' +import PromissoryNoteForm from './PromissoryNoteForm' +import CheckNoteDetails from './CheckNoteDetails' +import CollectionDialog from './CollectionDialog' +import EndorsementDialog from './EndorsementDialog' +import Widget from '../../../components/common/Widget' interface CheckNoteManagementProps { - checks: FiCheck[]; - promissoryNotes: PromissoryNote[]; - currentAccounts: FiCurrentAccount[]; - onAddCheck: ( - check: Omit - ) => void; + checks: FiCheck[] + promissoryNotes: PromissoryNote[] + currentAccounts: FiCurrentAccount[] + onAddCheck: (check: Omit) => void onEditCheck: ( id: string, - check: Omit - ) => void; - onAddNote: ( - note: Omit - ) => void; + check: Omit, + ) => void + onAddNote: (note: Omit) => void onEditNote: ( id: string, - note: Omit - ) => void; - onCollectCheck: (id: string, collectionDate: Date) => void; - onCollectNote: (id: string, collectionDate: Date) => void; - onEndorseCheck: (id: string, endorsedTo: string) => void; - onEndorseNote: (id: string, endorsedTo: string) => void; + note: Omit, + ) => void + onCollectCheck: (id: string, collectionDate: Date) => void + onCollectNote: (id: string, collectionDate: Date) => void + onEndorseCheck: (id: string, endorsedTo: string) => void + onEndorseNote: (id: string, endorsedTo: string) => void } const CheckNoteManagement: React.FC = ({ @@ -64,130 +60,117 @@ const CheckNoteManagement: React.FC = ({ onEndorseCheck, onEndorseNote, }) => { - const [activeTab, setActiveTab] = useState<"checks" | "notes">("checks"); - const [searchTerm, setSearchTerm] = useState(""); - const [selectedCheckStatus, setSelectedCheckStatus] = useState< - CheckStatusEnum | "all" - >("all"); - const [selectedNoteStatus, setSelectedNoteStatus] = useState< - NoteStatusEnum | "all" - >("all"); - const [selectedType, setSelectedType] = useState< - CheckTypeEnum | NoteTypeEnum | "all" - >("all"); - const [sortBy, setSortBy] = useState<"dueDate" | "amount" | "issueDate">( - "dueDate" - ); + const [activeTab, setActiveTab] = useState<'checks' | 'notes'>('checks') + const [searchTerm, setSearchTerm] = useState('') + const [selectedCheckStatus, setSelectedCheckStatus] = useState('all') + const [selectedNoteStatus, setSelectedNoteStatus] = useState('all') + const [selectedType, setSelectedType] = useState('all') + const [sortBy, setSortBy] = useState<'dueDate' | 'amount' | 'issueDate'>('dueDate') // Dialog states - const [showCheckForm, setShowCheckForm] = useState(false); - const [showNoteForm, setShowNoteForm] = useState(false); - const [showDetails, setShowDetails] = useState(false); - const [showCollectionDialog, setShowCollectionDialog] = useState(false); - const [showEndorsementDialog, setShowEndorsementDialog] = useState(false); - const [selectedItem, setSelectedItem] = useState< - FiCheck | PromissoryNote | null - >(null); - const [editingCheck, setEditingCheck] = useState(null); - const [editingNote, setEditingNote] = useState(null); + const [showCheckForm, setShowCheckForm] = useState(false) + const [showNoteForm, setShowNoteForm] = useState(false) + const [showDetails, setShowDetails] = useState(false) + const [showCollectionDialog, setShowCollectionDialog] = useState(false) + const [showEndorsementDialog, setShowEndorsementDialog] = useState(false) + const [selectedItem, setSelectedItem] = useState(null) + const [editingCheck, setEditingCheck] = useState(null) + const [editingNote, setEditingNote] = useState(null) // Handler functions const handleAddCheck = () => { - setEditingCheck(null); - setShowCheckForm(true); - }; + setEditingCheck(null) + setShowCheckForm(true) + } const handleEditCheck = (check: FiCheck) => { - setEditingCheck(check); - setShowCheckForm(true); - }; + setEditingCheck(check) + setShowCheckForm(true) + } const handleAddNote = () => { - setEditingNote(null); - setShowNoteForm(true); - }; + setEditingNote(null) + setShowNoteForm(true) + } const handleEditNote = (note: PromissoryNote) => { - setEditingNote(note); - setShowNoteForm(true); - }; + setEditingNote(note) + setShowNoteForm(true) + } const handleViewDetails = (item: FiCheck | PromissoryNote) => { - setSelectedItem(item); - setShowDetails(true); - }; + setSelectedItem(item) + setShowDetails(true) + } const handleCollectItem = (item: FiCheck | PromissoryNote) => { - setSelectedItem(item); - setShowCollectionDialog(true); - }; + setSelectedItem(item) + setShowCollectionDialog(true) + } const handleEndorseItem = (item: FiCheck | PromissoryNote) => { - setSelectedItem(item); - setShowEndorsementDialog(true); - }; + setSelectedItem(item) + setShowEndorsementDialog(true) + } const handleSaveCheck = ( - checkData: Omit + checkData: Omit, ) => { if (editingCheck) { - onEditCheck(editingCheck.id, checkData); + onEditCheck(editingCheck.id, checkData) } else { - onAddCheck(checkData); + onAddCheck(checkData) } - setShowCheckForm(false); - setEditingCheck(null); - }; + setShowCheckForm(false) + setEditingCheck(null) + } const handleSaveNote = ( - noteData: Omit< - PromissoryNote, - "id" | "creationTime" | "lastModificationTime" - > + noteData: Omit, ) => { if (editingNote) { - onEditNote(editingNote.id, noteData); + onEditNote(editingNote.id, noteData) } else { - onAddNote(noteData); + onAddNote(noteData) } - setShowNoteForm(false); - setEditingNote(null); - }; + setShowNoteForm(false) + setEditingNote(null) + } const handleConfirmCollection = (collectionDate: Date) => { if (selectedItem) { - if ("checkNumber" in selectedItem) { - onCollectCheck(selectedItem.id, collectionDate); + if ('checkNumber' in selectedItem) { + onCollectCheck(selectedItem.id, collectionDate) } else { - onCollectNote(selectedItem.id, collectionDate); + onCollectNote(selectedItem.id, collectionDate) } } - setShowCollectionDialog(false); - setSelectedItem(null); - }; + setShowCollectionDialog(false) + setSelectedItem(null) + } const handleConfirmEndorsement = (endorsedTo: string) => { if (selectedItem) { - if ("checkNumber" in selectedItem) { - onEndorseCheck(selectedItem.id, endorsedTo); + if ('checkNumber' in selectedItem) { + onEndorseCheck(selectedItem.id, endorsedTo) } else { - onEndorseNote(selectedItem.id, endorsedTo); + onEndorseNote(selectedItem.id, endorsedTo) } } - setShowEndorsementDialog(false); - setSelectedItem(null); - }; + setShowEndorsementDialog(false) + setSelectedItem(null) + } const handleCloseDialogs = () => { - setShowCheckForm(false); - setShowNoteForm(false); - setShowDetails(false); - setShowCollectionDialog(false); - setShowEndorsementDialog(false); - setSelectedItem(null); - setEditingCheck(null); - setEditingNote(null); - }; + setShowCheckForm(false) + setShowNoteForm(false) + setShowDetails(false) + setShowCollectionDialog(false) + setShowEndorsementDialog(false) + setSelectedItem(null) + setEditingCheck(null) + setEditingNote(null) + } const filteredChecks = checks .filter((check) => { @@ -198,33 +181,28 @@ const CheckNoteManagement: React.FC = ({ !check.payeeName.toLowerCase().includes(searchTerm.toLowerCase()) && !check.bankName.toLowerCase().includes(searchTerm.toLowerCase()) ) { - return false; + return false } - if ( - selectedCheckStatus !== "all" && - check.status !== selectedCheckStatus - ) { - return false; + if (selectedCheckStatus !== 'all' && check.status !== selectedCheckStatus) { + return false } - if (selectedType !== "all" && check.type !== selectedType) { - return false; + if (selectedType !== 'all' && check.type !== selectedType) { + return false } - return true; + return true }) .sort((a, b) => { switch (sortBy) { - case "dueDate": - return new Date(a.dueDate).getTime() - new Date(b.dueDate).getTime(); - case "amount": - return b.amount - a.amount; - case "issueDate": - return ( - new Date(b.issueDate).getTime() - new Date(a.issueDate).getTime() - ); + case 'dueDate': + return new Date(a.dueDate).getTime() - new Date(b.dueDate).getTime() + case 'amount': + return b.amount - a.amount + case 'issueDate': + return new Date(b.issueDate).getTime() - new Date(a.issueDate).getTime() default: - return 0; + return 0 } - }); + }) const filteredNotes = promissoryNotes .filter((note) => { @@ -234,115 +212,113 @@ const CheckNoteManagement: React.FC = ({ !note.drawerName.toLowerCase().includes(searchTerm.toLowerCase()) && !note.payeeName.toLowerCase().includes(searchTerm.toLowerCase()) ) { - return false; + return false } - if (selectedNoteStatus !== "all" && note.status !== selectedNoteStatus) { - return false; + if (selectedNoteStatus !== 'all' && note.status !== selectedNoteStatus) { + return false } - if (selectedType !== "all" && note.type !== selectedType) { - return false; + if (selectedType !== 'all' && note.type !== selectedType) { + return false } - return true; + return true }) .sort((a, b) => { switch (sortBy) { - case "dueDate": - return new Date(a.dueDate).getTime() - new Date(b.dueDate).getTime(); - case "amount": - return b.amount - a.amount; - case "issueDate": - return ( - new Date(b.issueDate).getTime() - new Date(a.issueDate).getTime() - ); + case 'dueDate': + return new Date(a.dueDate).getTime() - new Date(b.dueDate).getTime() + case 'amount': + return b.amount - a.amount + case 'issueDate': + return new Date(b.issueDate).getTime() - new Date(a.issueDate).getTime() default: - return 0; + return 0 } - }); + }) const getCheckStatusLabel = (status: CheckStatusEnum) => { const statusLabels = { - [CheckStatusEnum.InHand]: "Elde", - [CheckStatusEnum.Deposited]: "Bankaya Verildi", - [CheckStatusEnum.Collected]: "Tahsil Edildi", - [CheckStatusEnum.Bounced]: "Karşılıksız", - [CheckStatusEnum.Endorsed]: "Ciro Edildi", - [CheckStatusEnum.Cancelled]: "İptal", - }; - return statusLabels[status]; - }; + [CheckStatusEnum.InHand]: 'Elde', + [CheckStatusEnum.Deposited]: 'Bankaya Verildi', + [CheckStatusEnum.Collected]: 'Tahsil Edildi', + [CheckStatusEnum.Bounced]: 'Karşılıksız', + [CheckStatusEnum.Endorsed]: 'Ciro Edildi', + [CheckStatusEnum.Cancelled]: 'İptal', + } + return statusLabels[status] + } const getCheckStatusColor = (status: CheckStatusEnum) => { const statusColors = { - [CheckStatusEnum.InHand]: "bg-blue-100 text-blue-800", - [CheckStatusEnum.Deposited]: "bg-yellow-100 text-yellow-800", - [CheckStatusEnum.Collected]: "bg-green-100 text-green-800", - [CheckStatusEnum.Bounced]: "bg-red-100 text-red-800", - [CheckStatusEnum.Endorsed]: "bg-purple-100 text-purple-800", - [CheckStatusEnum.Cancelled]: "bg-gray-100 text-gray-800", - }; - return statusColors[status]; - }; + [CheckStatusEnum.InHand]: 'bg-blue-100 text-blue-800', + [CheckStatusEnum.Deposited]: 'bg-yellow-100 text-yellow-800', + [CheckStatusEnum.Collected]: 'bg-green-100 text-green-800', + [CheckStatusEnum.Bounced]: 'bg-red-100 text-red-800', + [CheckStatusEnum.Endorsed]: 'bg-purple-100 text-purple-800', + [CheckStatusEnum.Cancelled]: 'bg-gray-100 text-gray-800', + } + return statusColors[status] + } const getNoteStatusLabel = (status: NoteStatusEnum) => { const statusLabels = { - [NoteStatusEnum.InHand]: "Elde", - [NoteStatusEnum.Collected]: "Tahsil Edildi", - [NoteStatusEnum.Overdue]: "Vadesi Geçmiş", - [NoteStatusEnum.Endorsed]: "Ciro Edildi", - [NoteStatusEnum.Cancelled]: "İptal", - }; - return statusLabels[status]; - }; + [NoteStatusEnum.InHand]: 'Elde', + [NoteStatusEnum.Collected]: 'Tahsil Edildi', + [NoteStatusEnum.Overdue]: 'Vadesi Geçmiş', + [NoteStatusEnum.Endorsed]: 'Ciro Edildi', + [NoteStatusEnum.Cancelled]: 'İptal', + } + return statusLabels[status] + } const getNoteStatusColor = (status: NoteStatusEnum) => { const statusColors = { - [NoteStatusEnum.InHand]: "bg-blue-100 text-blue-800", - [NoteStatusEnum.Collected]: "bg-green-100 text-green-800", - [NoteStatusEnum.Overdue]: "bg-red-100 text-red-800", - [NoteStatusEnum.Endorsed]: "bg-purple-100 text-purple-800", - [NoteStatusEnum.Cancelled]: "bg-gray-100 text-gray-800", - }; - return statusColors[status]; - }; + [NoteStatusEnum.InHand]: 'bg-blue-100 text-blue-800', + [NoteStatusEnum.Collected]: 'bg-green-100 text-green-800', + [NoteStatusEnum.Overdue]: 'bg-red-100 text-red-800', + [NoteStatusEnum.Endorsed]: 'bg-purple-100 text-purple-800', + [NoteStatusEnum.Cancelled]: 'bg-gray-100 text-gray-800', + } + return statusColors[status] + } const getTypeLabel = (type: CheckTypeEnum | NoteTypeEnum) => { if (type === CheckTypeEnum.Received || type === NoteTypeEnum.Received) { - return "Alınan"; + return 'Alınan' } else if (type === CheckTypeEnum.Issued || type === NoteTypeEnum.Issued) { - return "Verilen"; + return 'Verilen' } - return "Bilinmeyen"; - }; + return 'Bilinmeyen' + } const getTypeColor = (type: CheckTypeEnum | NoteTypeEnum) => { if (type === CheckTypeEnum.Received || type === NoteTypeEnum.Received) { - return "bg-green-100 text-green-800"; + return 'bg-green-100 text-green-800' } else if (type === CheckTypeEnum.Issued || type === NoteTypeEnum.Issued) { - return "bg-orange-100 text-orange-800"; + return 'bg-orange-100 text-orange-800' } - return "bg-gray-100 text-gray-800"; - }; + return 'bg-gray-100 text-gray-800' + } const getDaysUntilDue = (dueDate: Date) => { - const today = new Date(); - const due = new Date(dueDate); - const diffTime = due.getTime() - today.getTime(); - const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); - return diffDays; - }; + const today = new Date() + const due = new Date(dueDate) + const diffTime = due.getTime() - today.getTime() + const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + return diffDays + } const formatCurrency = (amount: number) => { - return amount.toLocaleString("tr-TR", { - style: "currency", - currency: "TRY", + return amount.toLocaleString('tr-TR', { + style: 'currency', + currency: 'TRY', minimumFractionDigits: 2, - }); - }; + }) + } const checkColumns: Column[] = [ { - key: "checkNumber", - header: "Çek No", + key: 'checkNumber', + header: 'Çek No', sortable: true, render: (check: FiCheck) => (
@@ -352,21 +328,17 @@ const CheckNoteManagement: React.FC = ({ ), }, { - key: "type", - header: "Tür", + key: 'type', + header: 'Tür', render: (check: FiCheck) => ( - + {getTypeLabel(check.type)} ), }, { - key: "parties", - header: "Taraflar", + key: 'parties', + header: 'Taraflar', render: (check: FiCheck) => (
@@ -380,78 +352,63 @@ const CheckNoteManagement: React.FC = ({ {check.currentAccount && (
Cari: - - {check.currentAccount.businessParty?.name} - + {check.currentAccount.businessParty?.name}
)}
), }, { - key: "dates", - header: "Tarihler", + key: 'dates', + header: 'Tarihler', render: (check: FiCheck) => { - const daysUntilDue = getDaysUntilDue(check.dueDate); - const isOverdue = daysUntilDue < 0; - const isDueSoon = daysUntilDue <= 7 && daysUntilDue >= 0; + const daysUntilDue = getDaysUntilDue(check.dueDate) + const isOverdue = daysUntilDue < 0 + const isDueSoon = daysUntilDue <= 7 && daysUntilDue >= 0 return (
- - Düzenleme:{" "} - {new Date(check.issueDate).toLocaleDateString("tr-TR")} - + Düzenleme: {new Date(check.issueDate).toLocaleDateString('tr-TR')}
- Vade: {new Date(check.dueDate).toLocaleDateString("tr-TR")} + Vade: {new Date(check.dueDate).toLocaleDateString('tr-TR')}
{isOverdue && ( -
- {Math.abs(daysUntilDue)} gün gecikme -
+
{Math.abs(daysUntilDue)} gün gecikme
)} {isDueSoon && !isOverdue && ( -
- {daysUntilDue} gün kaldı -
+
{daysUntilDue} gün kaldı
)}
- ); + ) }, }, { - key: "amount", - header: "Tutar", + key: 'amount', + header: 'Tutar', sortable: true, render: (check: FiCheck) => (
- - {formatCurrency(check.amount)} - + {formatCurrency(check.amount)}
), }, { - key: "status", - header: "Durum", + key: 'status', + header: 'Durum', render: (check: FiCheck) => ( {getCheckStatusLabel(check.status)} @@ -459,28 +416,23 @@ const CheckNoteManagement: React.FC = ({ ), }, { - key: "processing", - header: "İşlemler", + key: 'processing', + header: 'İşlemler', render: (check: FiCheck) => (
{check.bankingDate && ( -
- Banka: {new Date(check.bankingDate).toLocaleDateString("tr-TR")} -
+
Banka: {new Date(check.bankingDate).toLocaleDateString('tr-TR')}
)} {check.collectionDate && ( -
- Tahsil:{" "} - {new Date(check.collectionDate).toLocaleDateString("tr-TR")} -
+
Tahsil: {new Date(check.collectionDate).toLocaleDateString('tr-TR')}
)} {check.endorsedTo &&
Ciro: {check.endorsedTo}
}
), }, { - key: "actions", - header: "İşlemler", + key: 'actions', + header: 'İşlemler', render: (check: FiCheck) => (
{check.status === CheckStatusEnum.InHand && ( @@ -519,38 +471,32 @@ const CheckNoteManagement: React.FC = ({
), }, - ]; + ] const noteColumns: Column[] = [ { - key: "noteNumber", - header: "Senet No", + key: 'noteNumber', + header: 'Senet No', sortable: true, render: (note: PromissoryNote) => (
{note.noteNumber}
- {note.location && ( -
{note.location}
- )} + {note.location &&
{note.location}
}
), }, { - key: "type", - header: "Tür", + key: 'type', + header: 'Tür', render: (note: PromissoryNote) => ( - + {getTypeLabel(note.type)} ), }, { - key: "parties", - header: "Taraflar", + key: 'parties', + header: 'Taraflar', render: (note: PromissoryNote) => (
@@ -564,78 +510,63 @@ const CheckNoteManagement: React.FC = ({ {note.currentAccount && (
Cari: - - {note.currentAccount.businessParty?.name} - + {note.currentAccount.businessParty?.name}
)}
), }, { - key: "dates", - header: "Tarihler", + key: 'dates', + header: 'Tarihler', render: (note: PromissoryNote) => { - const daysUntilDue = getDaysUntilDue(note.dueDate); - const isOverdue = daysUntilDue < 0; - const isDueSoon = daysUntilDue <= 7 && daysUntilDue >= 0; + const daysUntilDue = getDaysUntilDue(note.dueDate) + const isOverdue = daysUntilDue < 0 + const isDueSoon = daysUntilDue <= 7 && daysUntilDue >= 0 return (
- - Düzenleme:{" "} - {new Date(note.issueDate).toLocaleDateString("tr-TR")} - + Düzenleme: {new Date(note.issueDate).toLocaleDateString('tr-TR')}
- Vade: {new Date(note.dueDate).toLocaleDateString("tr-TR")} + Vade: {new Date(note.dueDate).toLocaleDateString('tr-TR')}
{isOverdue && ( -
- {Math.abs(daysUntilDue)} gün gecikme -
+
{Math.abs(daysUntilDue)} gün gecikme
)} {isDueSoon && !isOverdue && ( -
- {daysUntilDue} gün kaldı -
+
{daysUntilDue} gün kaldı
)}
- ); + ) }, }, { - key: "amount", - header: "Tutar", + key: 'amount', + header: 'Tutar', sortable: true, render: (note: PromissoryNote) => (
- - {formatCurrency(note.amount)} - + {formatCurrency(note.amount)}
), }, { - key: "status", - header: "Durum", + key: 'status', + header: 'Durum', render: (note: PromissoryNote) => ( {getNoteStatusLabel(note.status)} @@ -643,23 +574,20 @@ const CheckNoteManagement: React.FC = ({ ), }, { - key: "processing", - header: "İşlemler", + key: 'processing', + header: 'İşlemler', render: (note: PromissoryNote) => (
{note.collectionDate && ( -
- Tahsil:{" "} - {new Date(note.collectionDate).toLocaleDateString("tr-TR")} -
+
Tahsil: {new Date(note.collectionDate).toLocaleDateString('tr-TR')}
)} {note.endorsedTo &&
Ciro: {note.endorsedTo}
}
), }, { - key: "actions", - header: "İşlemler", + key: 'actions', + header: 'İşlemler', render: (note: PromissoryNote) => (
{note.status === NoteStatusEnum.InHand && ( @@ -697,64 +625,49 @@ const CheckNoteManagement: React.FC = ({
), }, - ]; + ] // Calculate statistics - const totalCheckAmount = checks.reduce((sum, check) => sum + check.amount, 0); - const totalNoteAmount = promissoryNotes.reduce( - (sum, note) => sum + note.amount, - 0 - ); + const totalCheckAmount = checks.reduce((sum, check) => sum + check.amount, 0) + const totalNoteAmount = promissoryNotes.reduce((sum, note) => sum + note.amount, 0) const receivedCheckAmount = checks - .filter( - (c) => - c.type === CheckTypeEnum.Received && - c.status !== CheckStatusEnum.Collected - ) - .reduce((sum, c) => sum + c.amount, 0); + .filter((c) => c.type === CheckTypeEnum.Received && c.status !== CheckStatusEnum.Collected) + .reduce((sum, c) => sum + c.amount, 0) const receivedNoteAmount = promissoryNotes - .filter( - (n) => - n.type === NoteTypeEnum.Received && - n.status !== NoteStatusEnum.Collected - ) - .reduce((sum, n) => sum + n.amount, 0); + .filter((n) => n.type === NoteTypeEnum.Received && n.status !== NoteStatusEnum.Collected) + .reduce((sum, n) => sum + n.amount, 0) // Due items const dueChecks = checks.filter((c) => { - const daysUntilDue = getDaysUntilDue(c.dueDate); - return daysUntilDue <= 7 && c.status === CheckStatusEnum.InHand; - }); + const daysUntilDue = getDaysUntilDue(c.dueDate) + return daysUntilDue <= 7 && c.status === CheckStatusEnum.InHand + }) const dueNotes = promissoryNotes.filter((n) => { - const daysUntilDue = getDaysUntilDue(n.dueDate); - return daysUntilDue <= 7 && n.status === NoteStatusEnum.InHand; - }); + const daysUntilDue = getDaysUntilDue(n.dueDate) + return daysUntilDue <= 7 && n.status === NoteStatusEnum.InHand + }) // Overdue items const overdueChecks = checks.filter((c) => { - const daysUntilDue = getDaysUntilDue(c.dueDate); - return daysUntilDue < 0 && c.status === CheckStatusEnum.InHand; - }); + const daysUntilDue = getDaysUntilDue(c.dueDate) + return daysUntilDue < 0 && c.status === CheckStatusEnum.InHand + }) const overdueNotes = promissoryNotes.filter((n) => { - const daysUntilDue = getDaysUntilDue(n.dueDate); - return daysUntilDue < 0 && n.status === NoteStatusEnum.InHand; - }); + const daysUntilDue = getDaysUntilDue(n.dueDate) + return daysUntilDue < 0 && n.status === NoteStatusEnum.InHand + }) return (
{/* Header */}
-

- Çek & Senet Takibi -

-

- Alınan ve verilen çek & senet yönetimi -

+

Çek & Senet Takibi

+

Alınan ve verilen çek & senet yönetimi