TransactionFacet
Facet for managing transactions and entries in the ledger
Handles transaction posting, status updates, and entry management
Now includes event bubbling to diamond level for subgraph indexing
Functions
onlyOwnerOrAccountant
modifier onlyOwnerOrAccountant();
onlyInitialized
modifier onlyInitialized();
postTransaction
Posts a balanced transaction with multiple entries
function postTransaction(
string[] calldata accountCodes,
int256[] calldata amounts,
string calldata description,
uint8 status,
uint256 transactionDate,
uint256 postedDate
) external onlyOwnerOrAccountant onlyInitialized returns (uint256);
Parameters
accountCodes
string[]
Array of account codes
amounts
int256[]
Array of corresponding amounts (can be positive or negative)
description
string
Transaction description
status
uint8
Initial transaction status (defaults to Pending if 0)
transactionDate
uint256
Custom transaction date (use 0 for current block time)
postedDate
uint256
Custom posted date (only used if status is Posted, use 0 for current block time)
Returns
<none>
uint256
The transaction ID
updateTransactionStatus
Updates the status of a transaction
function updateTransactionStatus(uint256 transactionId, LedgerStorage.TransactionStatus newStatus)
external
onlyOwnerOrAccountant
onlyInitialized;
Parameters
transactionId
uint256
The ID of the transaction to update
newStatus
LedgerStorage.TransactionStatus
The new status to set
getTransactionEntries
Gets all entry IDs for a specific transaction
function getTransactionEntries(uint256 transactionId) external view onlyInitialized returns (uint256[] memory);
Parameters
transactionId
uint256
The transaction ID to query
Returns
<none>
uint256[]
Array of entry IDs associated with the transaction
getTransaction
Gets transaction details including status
function getTransaction(uint256 transactionId)
external
view
onlyInitialized
returns (
uint256 id,
uint256 transactionDate,
string memory description,
LedgerStorage.TransactionStatus status,
uint256 postedAt
);
Parameters
transactionId
uint256
The transaction ID to query
Returns
id
uint256
Transaction ID
transactionDate
uint256
Transaction date (can be backdated)
description
string
Transaction description
status
LedgerStorage.TransactionStatus
Transaction status
postedAt
uint256
When the transaction was posted (0 if not yet posted)
entries
Get entry information
function entries(uint256 entryId) external view onlyInitialized returns (LedgerStorage.Entry memory entry);
Parameters
entryId
uint256
The entry ID
Returns
entry
LedgerStorage.Entry
The entry struct
transactions
Get transaction information
function transactions(uint256 transactionId)
external
view
onlyInitialized
returns (LedgerStorage.Transaction memory transaction);
Parameters
transactionId
uint256
The transaction ID
Returns
transaction
LedgerStorage.Transaction
The transaction struct
nextEntryId
Get the next entry ID
function nextEntryId() external view onlyInitialized returns (uint256);
Returns
<none>
uint256
The next entry ID
nextTransactionId
Get the next transaction ID
function nextTransactionId() external view onlyInitialized returns (uint256);
Returns
<none>
uint256
The next transaction ID
Events
EntryPosted
event EntryPosted(uint256 entryId, string accountCode, int256 amount, string description, uint256 transactionId);
TransactionCreated
event TransactionCreated(
uint256 transactionId,
string description,
LedgerStorage.TransactionStatus status,
uint256 transactionDate,
uint256 postedDate
);
TransactionStatusUpdated
event TransactionStatusUpdated(
uint256 transactionId, LedgerStorage.TransactionStatus status, uint256 transactionDate, uint256 postedAt
);
Last updated
Was this helpful?