Zadanie Paragon to Faktura

Zadanie egzaminacyjne: ParagonNaFakture

Wykonaj aplikację desktopową WPF o nazwie ParagonNaFakture. Program ma wczytywać dane z pliku paragon.json, wyświetlać pozycje paragonu w tabeli, obliczać podsumowanie kwot oraz umożliwiać zapis i wydruk faktury VAT na podstawie wczytanego paragonu.

Struktura projektu

W projekcie utwórz następujące katalogi i pliki:

ParagonNaFakture

├── MainWindow.xaml
├── MainWindow.xaml.cs
├── paragon.json

└── Model
└── Paragon.cs

W katalogu Model utwórz plik Paragon.cs, a w nim klasy:

Paragon
PozycjaParagonu

Klasa Paragon powinna przechowywać:

Sklep
DataWystawienia
Pozycje

Klasa PozycjaParagonu powinna przechowywać:

Kod
Nazwa
Ilosc
CenaJednostkowa
Wartosc

Właściwość Wartosc powinna być obliczana na podstawie ilości i ceny jednostkowej.


Plik paragon.json

{
  "sklep": "Sklep Komputerowy",
  "dataWystawieniaParagonu": "2024-05-24",
  "waluta": "PLN",
  "stawkaVat": 23,
  "pozycje": [
    {
      "lp": 1,
      "kod": "KB001",
      "nazwa": "Klawiatura mechaniczna Logitech G Pro",
      "ilosc": 1,
      "cenaJednostkowa": 499.00,
      "wartosc": 499.00
    },
    {
      "lp": 2,
      "kod": "MS002",
      "nazwa": "Mysz bezprzewodowa Logitech G Pro X Superlight",
      "ilosc": 1,
      "cenaJednostkowa": 599.00,
      "wartosc": 599.00
    },
    {
      "lp": 3,
      "kod": "MON003",
      "nazwa": "Monitor 27\" Dell G2724D",
      "ilosc": 1,
      "cenaJednostkowa": 1199.00,
      "wartosc": 1199.00
    },
    {
      "lp": 4,
      "kod": "CPU004",
      "nazwa": "Procesor Intel Core i7-13700K",
      "ilosc": 1,
      "cenaJednostkowa": 1699.00,
      "wartosc": 1699.00
    },
    {
      "lp": 5,
      "kod": "MB005",
      "nazwa": "Płyta główna ASUS TUF Z790-PLUS WiFi",
      "ilosc": 1,
      "cenaJednostkowa": 1099.00,
      "wartosc": 1099.00
    },
    {
      "lp": 6,
      "kod": "RAM006",
      "nazwa": "Pamięć RAM Kingston Fury 32GB DDR5 6000MHz",
      "ilosc": 1,
      "cenaJednostkowa": 599.00,
      "wartosc": 599.00
    },
    {
      "lp": 7,
      "kod": "GPU007",
      "nazwa": "Karta graficzna MSI GeForce RTX 4070 Ti SUPER",
      "ilosc": 1,
      "cenaJednostkowa": 3499.00,
      "wartosc": 3499.00
    },
    {
      "lp": 8,
      "kod": "SSD008",
      "nazwa": "Dysk SSD Samsung 990 PRO 2TB NVMe",
      "ilosc": 1,
      "cenaJednostkowa": 749.00,
      "wartosc": 749.00
    },
    {
      "lp": 9,
      "kod": "PSU009",
      "nazwa": "Zasilacz be quiet! Pure Power 12 M 850W",
      "ilosc": 1,
      "cenaJednostkowa": 649.00,
      "wartosc": 649.00
    },
    {
      "lp": 10,
      "kod": "CASE010",
      "nazwa": "Obudowa Fractal Design Meshify 2",
      "ilosc": 1,
      "cenaJednostkowa": 599.00,
      "wartosc": 599.00
    }
  ],
  "podsumowanie": {
    "liczbaPozycji": 10,
    "sumaNetto": 11689.43,
    "vat23": 2688.57,
    "sumaBrutto": 14378.00
  }
}

W projekcie umieść plik paragon.json zawierający dane paragonu ze sklepu komputerowego. Plik powinien zawierać 10 produktów, na przykład:

klawiatura, mysz, monitor, procesor, płyta główna, pamięć RAM, karta graficzna, dysk SSD, zasilacz, obudowa

Każdy produkt powinien mieć:

kod produktu
nazwę produktu
ilość
cenę jednostkową

Plik paragon.json ustaw tak, aby był kopiowany do katalogu wyjściowego programu.

Wymagania dotyczące interfejsu

Aplikacja powinna mieć nowoczesny, ale prosty układ możliwy do wykonania w WPF.

Należy zastosować główny layout typu:

Grid

Główne okno powinno być podzielone na trzy części:

lewy panel nawigacyjny
środkowy panel z danymi paragonu
prawy panel z podsumowaniem i fakturą VAT

Wewnątrz paneli należy wykorzystać:

Grid
StackPanel
Border
DataGrid
TextBlock
Button
Separator

Kolorystyka aplikacji

Zastosuj jasny, czytelny motyw aplikacji.

Przykładowe kolory:

tło główne: #F4F7FB
białe panele: #FFFFFF
obramowania: #DDE3EA
kolor główny niebieski: #0B5ED7
jasnoniebieskie tło aktywnego przycisku: #E8F1FF
zielony komunikat sukcesu: #DCFCE7
obramowanie zielonego komunikatu: #86EFAC
tekst ciemny: #0F172A
tekst pomocniczy: #64748B

Panele powinny mieć zaokrąglone rogi przy użyciu właściwości:

CornerRadius

Wymagane kontrolki

W aplikacji użyj następujących kontrolek:

Button
TextBlock
DataGrid
Border
StackPanel
Grid
Separator

Przyciski:

Wczytaj paragon
Wybierz plik
Wydrukuj fakturę VAT
Zapisz fakturę do pliku

Tabela DataGrid powinna wyświetlać kolumny:

Kod
Nazwa produktu
Ilość
Cena jedn.
Wartość

Działanie programu

Po uruchomieniu aplikacji użytkownik powinien widzieć pusty widok gotowy do wczytania pliku.

Po kliknięciu przycisku Wybierz plik lub Wczytaj paragon program powinien umożliwić wybranie pliku paragon.json.

Po poprawnym wczytaniu pliku program powinien:

wyświetlić nazwę pliku
wyświetlić ścieżkę do pliku
wstawić produkty do tabeli DataGrid
policzyć liczbę pozycji
obliczyć sumę netto
obliczyć VAT 23%
obliczyć sumę brutto
wyświetlić nazwę sklepu
wyświetlić datę wystawienia paragonu
pokazać komunikat „Paragon wczytany”

Faktura VAT

Na podstawie wczytanego paragonu program powinien umożliwiać:

wydrukowanie faktury VAT
zapisanie faktury VAT do pliku tekstowego

Faktura powinna zawierać:

tytuł „FAKTURA VAT”
nazwę sklepu
datę wystawienia
listę produktów
sumę netto
wartość VAT 23%
sumę brutto

Jeżeli użytkownik spróbuje zapisać lub wydrukować fakturę bez wcześniejszego wczytania paragonu, program powinien wyświetlić komunikat:

Najpierw wczytaj paragon.

Kryteria oceny

Uczeń otrzymuje punkty za:

utworzenie poprawnej struktury projektu
przygotowanie pliku paragon.json
utworzenie klas Paragon i PozycjaParagonu
poprawne wczytanie danych z JSON
wyświetlenie danych w DataGrid
obliczenie netto, VAT i brutto
wykonanie nowoczesnego layoutu WPF
użycie wskazanych kontrolek
obsługę zapisu faktury do pliku
obsługę wydruku faktury
czytelność kodu i nazw zmiennych

Program powinien być wykonany w języku C# w technologii WPF.