This commit is contained in:
fred 2024-01-05 21:51:41 +01:00
parent e701aa86db
commit f09ef9e226
4 changed files with 796 additions and 414 deletions

View File

@ -10,12 +10,14 @@
</head>
<body>
<!--
<header>
<p id="description">
ZenCard Transactions
</p>
</header>
-->
<form method="get" action="#expenses" id="explore">
<p>
@ -44,6 +46,10 @@
<section id="expenses">
</section>
<section id="export-button">
<!-- Export button will be added here dynamically -->
</section>
<footer>
<blockquote>
Follow the money
@ -54,7 +60,7 @@
</a>
</p>
</footer>
<script src="index_fichiers/jspdf.min.js"></script>
<script type="module" src="index_fichiers/app.js">
</script>
<script>

View File

@ -1,4 +1,5 @@
import * as d3 from "https://cdn.jsdelivr.net/npm/d3@7/+esm";
export const DU = 10.68;
export const MAX_NB_TX = 200;
let txLimit = MAX_NB_TX;
@ -244,6 +245,7 @@ export const fetchExpenses = async (pubkey, minTime, limit = MAX_NB_TX) => {
let expensesByRecipient = {};
let totalAmount = 0;
let transactions = [];
for (const hit of data.hits.hits) {
@ -257,6 +259,15 @@ export const fetchExpenses = async (pubkey, minTime, limit = MAX_NB_TX) => {
expensesByRecipient[tx.recipient] += tx.amount/100;
totalAmount += tx.amount;
transactions.push({
date: new Date(tx.medianTime).toLocaleDateString(),
walletId: pubkey,
income: tx.amount > 0 ? tx.amount / 100 : 0,
outcome: tx.amount < 0 ? -tx.amount / 100 : 0,
comment: "Transaction Comment", // Add your logic to get the comment
});
}
totalAmount = totalAmount/100;
@ -395,10 +406,79 @@ export const fetchCesiumProfiles = async (pubkeys, limit) => {
throw new Error("Failed to fetch data from all nodes");
};
// Function to export transactions to PDF
const exportToPDF = (transactions) => {
const pdf = new jsPDF();
pdf.text("Transaction Report", 20, 10);
// Define table columns
const columns = ["Date", "Wallet ID", "Income", "Outcome", "Comment"];
// Initialize y-position for table
let y = 20;
// Add table headers
columns.forEach((column, index) => {
pdf.text(column, 20 + index * 40, y);
});
// Increment y for the next row
y += 10;
// Add transactions to the table
transactions.forEach((transaction) => {
pdf.text(transaction.date, 20, y);
pdf.text(transaction.walletId, 60, y);
pdf.text(transaction.income.toString(), 100, y);
pdf.text(transaction.outcome.toString(), 140, y);
pdf.text(transaction.comment, 180, y);
// Increment y for the next row
y += 10;
});
// Save the PDF
pdf.save("transaction_report.pdf");
};
export const displayExpenses = (expensesByRecipient, expensesTotalAmount, recipientsCesiumProfiles, chartColors, currentPubkey, currentProfile) => {
let screenElt = document.querySelector('#expenses');
let exportButtonContainer = document.querySelector("#export-button");
let exportButton = document.createElement("button");
exportButton.textContent = "Export to PDF";
exportButton.addEventListener("click", async () => {
try {
const { expensesByRecipient, expensesTotalAmount } = await fetchExpenses(
currentPubkey,
minTime,
txLimit
);
let transactions = [];
for (const recipient in expensesByRecipient) {
transactions.push({
date: new Date().toLocaleDateString(),
walletId: currentPubkey,
income: expensesByRecipient[recipient],
outcome: 0,
comment: "Transaction Comment", // Add your logic to get the comment
});
}
// Export transactions to PDF
exportToPDF(transactions);
} catch (error) {
console.error(`Error exporting to PDF: ${error}`);
}
});
// Append the export button to the container
exportButtonContainer.innerHTML = '';
exportButtonContainer.appendChild(exportButton);
let screenElt = document.querySelector('#expenses');
screenElt.innerHTML = '';
let currentProfileTitleElt = document.createElement('h2');

286
earth/g1gate/index_fichiers/jspdf.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -55,3 +55,13 @@ footer a:hover {
text-decoration: underline;
}
#export-button {
margin-top: 10px;
}
#export-button button {
padding: 8px 12px;
font-size: 14px;
cursor: pointer;
}