Nauč se Python > Kurzy > Začátečnický kurz Pyladies (Mergado) > Soubory, HTTP, JSON, API > Domácí projekty

Domácí projekty #

Tento domácí úkol ti pomůže procvičit všechny znalosti z posledních lekcí:

  • opakování objektového programování,
  • využívání otevřeného API třetích stran,
  • práci se soubory,
  • práci s HTTP dotazy pomocí knihovny requests,
  • práci s datovým formátem JSON,
  • práci s dalšími balíčky (packages) jako os, datetime či třeba qrcode.

Vytvoř jednoduchý účetní program, který bude pracovat s kurzovním lístkem a bude generovat faktury s QR platbou pro uživatele.

Program se zeptá na položku, její cenu a měnu. Pokud měna není v českých korunách, přepočítá částku na Kč podle platného kurzovního lístku ze zdrojové měny. Pokud taková měna neexistuje či není zadána, program vyhodí vlastní výjimku CurrencyError. Variabilní symbol (VS) můžeš vygenerovat náhodný - ten pak použij i jako unikátní identifikátor faktury a obrázku s QR kódem. Pokus se zaručit, že VS bude vždy unikátní.

Program piš objektově. Měl by obsahovat část pro konvertor měn, pro samotnou položku k fakturaci, vygenerování QR platby, řídící část a možná nějaké pomocné funkce pro obecnou práci. Kromě hlavní řídící části, tzv. main, by program neměl obsahovat žádné inputy ani printy. Chceš totiž, aby tvůj program byl i strojově použitelný, např. aby mohl přečíst 1000 záznamů z jiného seznamu nebo z nějakého API, a pro každý vygeneroval fakturu, kterou třeba někam pošle - to dělat nemusíš ale mysli na to při návrhu :).

Očekávaný výstup programu #

V základní variantě se program na něco zeptá, následně vypíše výsledek - a ukončí se.

$ python qr_payment_gen.py
Generátor faktur.
Částka v jiných měnách než Kč, bude převedena na koruny podle platného kurzu ČNB.

Zadej položku platby: Platba za kurz Pyladies
Částka: 10000
Měna: Kč

Generuji fakturu...
Faktura je hotová na odkaze <cesta_k_vygenerovanému_souboru/qr_platba_{unikatni_ID}.html>

S čím si program neporadí je jednotka nebo měna, která není na kurzovním lístku nebo není zadána vůbec. Při zadání nulové či záporné částky by program neměl pokračovat.

Zdroje #

Kurzy #

Jako kurzovní lístek použij veřejné API z Kurzy.cz. Aby se nemusely kurzy při každém spouštění aplikace stahovat, ukládej kopii lokálně ve formátu JSON do souboru a aktualizuj ji, pouze pokud jsou data v souboru ze staršího kalendářního dne nebo neexistují vůbec. V opačném případě je pouze načti ze souboru.

QR platba #

Nastuduj si formát QR platby v jakém ho banky očekávají - stačí základní varianta s účtem, částkou, VS a zprávou pro příjemce.

Pro samotné vygenerování obrázku použij Python knihovnu qrcode (vyžaduje nainstalovat i knihovnu pillow).

Účet banky použij nějaký vymyšlený (ale validní), co bude nadefinovaný jako výchozí (počítej, že ho bude možné někdy měnit).

QR kód by ale měl být validní, aplikace mobilního bankovnictví ho musí umět načíst!

HTML template pro fakturu #

Pro finální fakturu s QR platbou použij tuto HTML šablonu, kterou si ulož jako soubor. Ten pak budeš pouze formátovat a generovat z něho konkrétní platby, jak Baťa cvičky.

<html>
  <head>
    <title>Faktura číslo {}</title>
  </head>
  <body>
    <h1>Platba za {}</h1>
      <p>Částka: {}Kč</p>
      <p>Na účet: {}</p>
      <p>VS: {}</p>
    <h2>QR platba</h2>
      <p><img src="{}"></p>
  </body>
</html>

Bonus #

1. Více položek #

Pokud chceš svůj program vylepšit, napiš ho tak, aby šlo zadat více položek a vygenerovat pro ně jednu společnou fakturu, kde bude celková částka v Kč, ale bude obsahovat seznam všech dílčích položek a jejich ceny v původní i české měně.

Pro hezké zobrazení na faktuře už to bude vyžadovat i práci se změnou HTML šablony ;-)

2. Parser čísla a měny #

Program si poradí se zápisem částky a měny v jednom řádku:

  • 10Kč
  • 10 Eur
  • €10
  • USD 10
  • 10USD
  • apod...

Může se hodit knihovna re pro regulární výrazy, ale jde to i bez :)


Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.