Compare commits

...

11 Commits
v2.0 ... main

6 changed files with 217 additions and 74 deletions

View File

@ -4,22 +4,31 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Přehled Financí 2024</title> <title>Přehled Financí 2024</title>
<link rel="stylesheet" href="styly.css"> <link rel="stylesheet" href="styly.css">
</head> </head>
<body> <body>
<h1>Přehled Financí za rok 2024</h1> <h2 class="archive-title">Přehled Financí za rok 2024</h2>
<table id="finance-table" border="1"> <div class="export-button-container">
<thead> <a href="finance_2024.csv" download="finance_2024.csv" class="btn btn-primary">📂 Stáhnout CSV</a>
<tr> </div>
<th>Datum</th> </div>
<th>Popis</th>
<th>Částka</th> <!-- Obalíme tabulku do kontejneru pro centrování -->
<th>Měna</th> <div class="archive-table-container">
<th>Typ</th> <table id="finance-table" class="table table-striped mb-3 archive-table">
</tr> <thead>
</thead> <tr>
<tbody> <th>Datum</th>
</tbody> <th>Popis</th>
</table> <th>Částka</th>
<th>Měna</th>
<th>Typ</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script> <script>
fetch('finance_2024.csv') fetch('finance_2024.csv')

View File

@ -3,14 +3,27 @@
Tento projekt slouží k zobrazení transparentního přehledu financí komunity. Stránka zobrazuje seznam příjmů a výdajů, které jsou uloženy v CSV souboru, a aktuální stav účtu. Tento projekt slouží k zobrazení transparentního přehledu financí komunity. Stránka zobrazuje seznam příjmů a výdajů, které jsou uloženy v CSV souboru, a aktuální stav účtu.
# Přehled Financí Komunity
Tento projekt slouží k zobrazení transparentního přehledu financí komunity. Stránka zobrazuje seznam příjmů a výdajů, které jsou uloženy v CSV souboru, a aktuální stav účtu.
## Struktura projektu ## Struktura projektu
- `index.html` - Hlavní HTML soubor obsahující strukturu stránky. - `index.html` - Hlavní HTML soubor obsahující strukturu stránky.
- `styly.css` - CSS soubor obsahující styly pro stránku. - `styly.css` - CSS soubor obsahující styly pro stránku.
- `skript.js` - JavaScript soubor obsahující logiku pro načítání a zpracování dat. - `skript.js` - JavaScript soubor obsahující logiku pro načítání a zpracování dat.
- `finance.csv` - CSV soubor obsahující data o transakcích. - `finance.csv` - CSV soubor obsahující data o aktuálním roce.
- `finance_2024.csv` - Archivní CSV soubor s daty za rok 2024.
- `2024.html` - Stránka pro zobrazení archivu financí za rok 2024.
- `README.md` - Tento soubor s informacemi o projektu. - `README.md` - Tento soubor s informacemi o projektu.
## 📂 Archiv finančních záznamů
Kromě aktuálních dat projekt také obsahuje **archiv starších finančních záznamů**, které lze zobrazit přes sekci **Archiv** na hlavní stránce.
### 📜 Dostupné roky:
🔹 **[Archiv 2024](https://git.arch-linux.cz/Archos/prehlad-financi-komunity/releases/download/v2.0/finance_2024.csv)**
🔹 **[Archivní stránka 2024](http://localhost:8000/2024.html) - Zobrazení v tabulce**
## Jak používat ## Jak používat

View File

@ -1,4 +1,4 @@
echo "Datum,Popis,Částka,Měna,Typ" > finance.csv "echo ""Datum",Popis,Částka,Měna,"Typ"" > finance.csv"
2025-01-01,Stav účtu 2024,18102.44,CZK,Příjem 2025-01-01,Stav účtu 2024,18102.44,CZK,Příjem
2025-01-04,Platba server Hetzner ,-3649,CZK,Výdaj 2025-01-04,Platba server Hetzner ,-3649,CZK,Výdaj
2025-01-04,Příspěvek M.Kroul,150,CZK,Příjem 2025-01-04,Příspěvek M.Kroul,150,CZK,Příjem
@ -34,4 +34,10 @@ echo "Datum,Popis,Částka,Měna,Typ" > finance.csv
2025-02-07,Příspěvek Plátce,200,CZK,Příjem 2025-02-07,Příspěvek Plátce,200,CZK,Příjem
2025-02-07,Příspěvek @fabia_man,200,CZK,Příjem 2025-02-07,Příspěvek @fabia_man,200,CZK,Příjem
2025-02-07,Platba domény archoslinux,-297,CZK,Výdaj 2025-02-07,Platba domény archoslinux,-297,CZK,Výdaj
2025-02-09,Příspěvek Infoek,550,CZK,Příjem
2025-02-15,Příspěvěk pan Wu,100,CZK,Příjem
2025-02-19,Příspěvek @Onqa6,100,CZK,Příjem
2025-02-19,Platba server Hetzner ,-3648,CZK,Výdaj
2025-02-19,Příspěvek D.Kolaja,111,CZK,Příjem
2025-02-19,Příspěvek Schmaker,200,CZK,Příjem
2025-02-19,Příspěvek Luboš Blažek,1000,CZK,Příjem

Can't render this file because it contains an unexpected character in line 1 and column 6.

View File

@ -49,6 +49,12 @@
</tbody> </tbody>
</table> </table>
</div> </div>
<!-- Archiv přehledů financí -->
<div class="container text-center mt-4">
<h2>Archiv přehledů financí</h2>
<button id="load-archive-2024" class="btn btn-secondary">Načíst rok 2024</button>
</div>
<footer class="text-center mt-auto py-3"> <footer class="text-center mt-auto py-3">
<p>&copy; 2024 <a href="https://git.arch-linux.cz/Archos/prehlad-financi-komunity" target="_blank">Archos</a></p> <p>&copy; 2024 <a href="https://git.arch-linux.cz/Archos/prehlad-financi-komunity" target="_blank">Archos</a></p>

114
skript.js
View File

@ -1,62 +1,70 @@
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
fetch('finance.csv') // Funkce pro načítání CSV souboru
.then(response => { function loadFinanceData(csvFile) {
if (!response.ok) { console.log(`Načítání souboru: ${csvFile}`); // Debug výpis
throw new Error('Network response was not ok'); fetch(csvFile)
} .then(response => {
return response.text(); if (!response.ok) {
}) throw new Error(`Soubor ${csvFile} nebyl nalezen.`);
.then(data => {
let rows = data.split('\n').slice(1);
rows = rows.filter(row => row.trim() !== ""); // Remove empty rows
rows.reverse(); // Reverse the order of rows
const tableBody = document.querySelector('#finance-table tbody');
let accountBalance = 0;
rows.forEach(row => {
const columns = row.split(',');
if (columns.length >= 5) {
const tr = document.createElement('tr');
columns.forEach(column => {
const td = document.createElement('td');
td.textContent = column.trim();
tr.appendChild(td);
});
tableBody.appendChild(tr);
// Debug output
console.log('Row:', row);
console.log('Columns:', columns);
// Calculate account balance
const amount = parseFloat(columns[2].replace(/,/g, '').replace(/[^0-9.-]/g, '')); // Remove any invalid characters and ensure proper decimal handling
const currency = columns[3].trim();
// Debug output
console.log('Amount:', amount);
console.log('Currency:', currency);
if (!isNaN(amount)) {
if (currency === 'CZK') {
accountBalance += amount;
} else if (currency === 'EUR') {
// For simplicity, assume 1 EUR = 25 CZK (you can adjust the conversion rate)
accountBalance += amount * 25;
}
} else {
console.error('Invalid amount:', columns[2]);
}
} }
return response.text();
})
.then(data => {
console.log('Načtená data:', data); // Debug výpis načtených dat
let rows = data.split('\n').slice(1); // Odstraníme hlavičku CSV souboru
rows = rows.filter(row => row.trim() !== ""); // Odstranit prázdné řádky
rows.reverse(); // Obrátit pořadí řádků
const tableBody = document.querySelector('#finance-table tbody');
tableBody.innerHTML = ''; // Vyprázdnit tabulku před načtením nových dat
let accountBalance = 0;
rows.forEach(row => {
const columns = row.split(',');
if (columns.length >= 5) {
const tr = document.createElement('tr');
columns.forEach(column => {
const td = document.createElement('td');
td.textContent = column.trim();
tr.appendChild(td);
});
tableBody.appendChild(tr);
// Výpočet zůstatku
const amount = parseFloat(columns[2].replace(/,/g, '').replace(/[^0-9.-]/g, '')); // Ošetření čísel
const currency = columns[3].trim();
if (!isNaN(amount)) {
if (currency === 'CZK') {
accountBalance += amount;
} else if (currency === 'EUR') {
accountBalance += amount * 25; // Pro jednoduchost: 1 EUR = 25 CZK
} else {
console.warn(`Nepodporovaná měna: ${currency}`); // Pro chyby v měně
}
} else {
console.warn('Neplatná částka:', columns[2]);
}
}
});
document.getElementById('account-balance').textContent = accountBalance.toFixed(2) + ' CZK';
})
.catch(error => {
console.error('Chyba při načítání CSV souboru:', error);
document.getElementById('account-balance').textContent = `Chyba: ${error.message}`;
}); });
document.getElementById('account-balance').textContent = accountBalance.toFixed(2) + ' CZK'; }
})
.catch(error => { // Načítání aktuálního souboru finance.csv
console.error('Error fetching the CSV file:', error); loadFinanceData('finance.csv'); // Soubor je ve stejné složce, proto nemusíš zadávat cestu
document.getElementById('account-balance').textContent = 'Chyba při načítání dat';
}); // Přidání funkce pro načítání archivovaných dat za rok 2024
document.getElementById('load-archive-2024').addEventListener('click', function() {
loadFinanceData('finance_2024_corrected.csv'); // Stejná složka pro archivovaný soubor
});
}); });
// Dropdown menu toggle (Bootstrap)
$(document).ready(function() { $(document).ready(function() {
$('#dropdownMenuButton').on('click', function() { $('#dropdownMenuButton').on('click', function() {
$('.dropdown-menu').toggle(); // Ruční zobrazení dropdown menu $('.dropdown-menu').toggle(); // Ruční zobrazení dropdown menu
}); });
}); });

109
styly.css
View File

@ -33,8 +33,8 @@ a[rel="me"] {
} }
.dropdown { .dropdown {
display: flex; display: flex;
justify-content: flex-end; /* Posune tlačítko doprava */ justify-content: flex-end;
margin-right: 20px; /* Přidá trochu prostoru od kraje */ margin-right: 20px;
} }
header .d-flex { header .d-flex {
display: flex; display: flex;
@ -47,6 +47,107 @@ header h1 {
text-align: center; text-align: center;
} }
.dropdown { /* Hlavní tabulka - beze změn */
margin-right: 20px; #finance-table {
width: 100%;
margin-top: 20px;
border-collapse: collapse;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
border-radius: 8px;
overflow: hidden;
}
/* Hlavička tabulky */
#finance-table th {
background-color: #343a40;
color: #fff;
text-transform: uppercase;
padding: 12px 18px;
text-align: center;
}
/* Řádky tabulky */
#finance-table td {
padding: 10px 15px;
text-align: left;
border-bottom: 1px solid #ddd;
}
/* Speciální úpravy pro archivní tabulku */
.archive-table-container {
max-width: 1000px; /* Pevná maximální šířka tabulky */
width: 100%;
margin: 0 auto; /* Centrované umístění */
padding: 20px;
}
/* Archivní tabulka - nebude přes celý monitor */
.archive-table {
width: 100%;
border-collapse: collapse;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
border-radius: 8px;
overflow: hidden;
}
/* Zvýraznění řádků pro archivní tabulku */
.archive-table tbody tr:nth-child(even) {
background-color: #d9d9d9; /* O něco tmavší šedá */
}
.archive-table tbody tr:nth-child(odd) {
background-color: #f2f2f2; /* O něco světlejší šedá */
}
/* Barevné odlišení příjmů a výdajů pro archivní tabulku */
.archive-table td.pozitivni {
color: #218838; /* Sytější zelená */
font-weight: bold;
}
.archive-table td.negativni {
color: #c82333; /* Sytější červená */
font-weight: bold;
}
/* Responzivní design */
@media (max-width: 768px) {
.archive-table-container {
max-width: 100%; /* Na mobilech bude tabulka široká 100% */
}
#finance-table th, #finance-table td {
padding: 8px;
font-size: 14px;
}
}
/* Zvýraznění nadpisu archivu */
.archive-title {
text-align: center;
font-size: 26px;
font-weight: bold;
color: #343a40;
text-transform: uppercase;
margin-bottom: 20px;
border-bottom: 3px solid #218838;
padding-bottom: 8px;
}
/* Kontejner pro tlačítko exportu */
.export-button-container {
text-align: center; /* Zarovná tlačítko na střed */
margin-top: 20px; /* Přidá trochu prostoru nad tlačítkem */
}
/* Styl tlačítka */
#export-pdf {
padding: 10px 20px; /* Lepší padding */
font-size: 16px; /* Větší písmo pro lepší čitelnost */
border-radius: 5px; /* Zaoblené rohy */
cursor: pointer;
transition: background-color 0.3s ease-in-out;
}
/* Efekt při najetí myší */
#export-pdf:hover {
background-color: #0056b3; /* Lehce tmavší modrá při hover */
} }