Przejdź do głównej zawartości

Rejestr faktur (mini)

Stworzysz Rejestr faktur - uproszczoną aplikację księgową do ewidencjonowania faktur. Każda faktura zawiera numer, kwotę, datę wystawienia i kontrahenta. Aplikacja pozwala przeglądać faktury, filtrować je po datach i generować proste raporty miesięczne.

Czego się nauczysz?

  • Pracy z danymi finansowymi (kwoty, walidacja)
  • Filtrowania danych po zakresie dat
  • Generowania prostych raportów i podsumowań
  • Formatowania kwot i dat w PHP

W prawdziwej pracy...

Systemy księgowe i fakturowe to fundament każdej firmy. Nawet jeśli nie będziesz programistą systemów ERP, zrozumienie jak działają rejestry dokumentów finansowych pomoże Ci w wielu projektach - od sklepów internetowych po aplikacje dla freelancerów.

  1. Dodawanie faktury Formularz pozwala wprowadzić numer faktury, kwotę (brutto), datę wystawienia i nazwę kontrahenta. Dane są walidowane i zapisywane.

  2. Lista faktur Wszystkie faktury wyświetlane są w tabeli z możliwością przeglądania. Widoczne są wszystkie kluczowe informacje.

  3. Filtrowanie i raporty Użytkownik może filtrować faktury po dacie lub miesiącu i zobaczyć podsumowanie (suma kwot).

Przykładowa struktura pliku JSON:

{
"invoices": [
{
"id": 1,
"number": "FV/2026/02/001",
"amount": 1230.00,
"date": "2026-02-13",
"contractor": "Firma ABC Sp. z o.o.",
"created_at": "2026-02-13 10:30:00"
},
{
"id": 2,
"number": "FV/2026/02/002",
"amount": 560.50,
"date": "2026-02-15",
"contractor": "Jan Kowalski",
"created_at": "2026-02-15 14:20:00"
}
]
}

Wymagane funkcje:

  • Formularz: numer faktury, kwota, data, kontrahent
  • Walidacja podstawowa w PHP (wymagane pola, kwota > 0)
  • Zapis faktury do pliku JSON
  • Wyświetlanie listy faktur w tabeli
  • Suma wszystkich faktur na dole tabeli

Przykładowy scenariusz:

Księgowa otwiera aplikację i dodaje nową fakturę: “FV/2026/02/001” na kwotę 1230 zł od “Firma ABC”. Faktura pojawia się na liście. Na dole widzi sumę wszystkich wprowadzonych faktur.

Ocena: 3.0

Walidacja i formatowanie kwoty:

<?php
$amount = $_POST['amount'] ?? 0;
// Zamień przecinek na kropkę (polskie formatowanie)
$amount = str_replace(',', '.', $amount);
$amount = floatval($amount);
if ($amount <= 0) {
$errors[] = 'Kwota musi być większa od 0';
}
// Formatowanie do wyświetlenia
echo number_format($amount, 2, ',', ' ') . '';
?>

Filtrowanie po miesiącu:

<?php
$month = $_GET['month'] ?? ''; // format: "2026-02"
$invoices = json_decode(file_get_contents('invoices.json'), true)['invoices'];
if (!empty($month)) {
$invoices = array_filter($invoices, function($inv) use ($month) {
return substr($inv['date'], 0, 7) === $month;
});
}
// Oblicz sumę
$total = array_sum(array_column($invoices, 'amount'));
?>

Generowanie raportu miesięcznego:

<?php
$report = [
'month' => $month,
'count' => count($invoices),
'total' => array_sum(array_column($invoices, 'amount')),
'average' => count($invoices) > 0
? array_sum(array_column($invoices, 'amount')) / count($invoices)
: 0
];
echo "Liczba faktur: {$report['count']}<br>";
echo "Suma: " . number_format($report['total'], 2, ',', ' ') . " zł<br>";
echo "Średnia: " . number_format($report['average'], 2, ',', ' ') . "";
?>

Walidacja numeru faktury:

<?php
$invoiceNumber = $_POST['number'] ?? '';
// Format: FV/RRRR/MM/NNN
if (!preg_match('/^FV\/\d{4}\/\d{2}\/\d{3}$/', $invoiceNumber)) {
$errors[] = 'Nieprawidłowy format numeru faktury (wymagany: FV/RRRR/MM/NNN)';
}
?>

Wykorzystaj lekcje!

Cotygodniowe spotkania podczas lekcji to idealny moment, by:

  • Pokazać postępy - nawet małe kroki się liczą
  • Wyjaśnić wątpliwości - pytaj, nie zgaduj
  • Skonsultować rozwiązania - feedback pomoże Ci się rozwijać

Pracuj iteracyjnie - lepiej mieć działający wariant A niż niedokończony C!