diff --git a/app/main.py b/app/main.py index 12345234..9ec0be1b 100644 --- a/app/main.py +++ b/app/main.py @@ -8,7 +8,7 @@ from app.dependencies import (logger, MEDIA_PATH, STATIC_PATH, templates) from app.internal.quotes import daily_quotes, load_quotes from app.routers import ( - agenda, calendar, categories, dayview, email, + agenda, calendar, categories, currency, dayview, email, event, invitation, profile, search, telegram, whatsapp ) from app.telegram.bot import telegram_bot @@ -38,6 +38,7 @@ def create_tables(engine, psql_environment): agenda.router, calendar.router, categories.router, + currency.router, dayview.router, email.router, event.router, diff --git a/app/routers/currency.py b/app/routers/currency.py new file mode 100644 index 00000000..3b812c5d --- /dev/null +++ b/app/routers/currency.py @@ -0,0 +1,32 @@ +import datetime + +from app.dependencies import templates +from fastapi import APIRouter, Request + + +router = APIRouter() + +# TODO: Add this as a feature to the calendar view/ +# day view/features panel frontend + + +@router.get("/currency") +def today_currency(request: Request): + """Current day currency router""" + + date = datetime.date.today().strftime("%Y-%m-%d") + return currency(request, date) + + +@router.get("/currency/{date}") +def currency(request: Request, date: str): + """Custom date currency router""" + + # TODO: get user default/preferred currency + base = "USD" + + return templates.TemplateResponse("currency.html", { + "request": request, + "base": base, + "date": date + }) diff --git a/app/static/currency.css b/app/static/currency.css new file mode 100644 index 00000000..40528f04 --- /dev/null +++ b/app/static/currency.css @@ -0,0 +1,6 @@ +div[data-visible='0'] { + display: none; +} +div[data-visible='1'] { + display: block; +} \ No newline at end of file diff --git a/app/static/currency.js b/app/static/currency.js new file mode 100644 index 00000000..c3c671aa --- /dev/null +++ b/app/static/currency.js @@ -0,0 +1,71 @@ +function getCurrency(baseCurrency, dateToday) { + const showCurrencyElement = document.getElementById("showCurrency") + const currencyViewElement = document.getElementById("currencyView"); + const myUrl = 'https://api.exchangeratesapi.io/' + dateToday + '?base=' + baseCurrency + + async function getResponse(myUrl) { + let response = await fetch(myUrl); + if (response.ok) { + let result = await response.json(); + currencyViewElement.innerHTML = ""; + showCurrencyElement.dataset.visible = "1"; + return result; + } + } + + getResponse(myUrl) + .then(result => buildCurrencyList(result)); + + function buildCurrencyList(data) { + function getListItem() { + const listItem = document.createElement("li"); + listItem.className = "list-group-item title_size_small"; + return listItem; + } + + function createBoldListItem(fieldString, currViewElem) { + const listItem = getListItem(); + const boldItem = document.createElement("strong"); + boldItem.innerHTML = fieldString; + listItem.appendChild(boldItem); + currViewElem.appendChild(listItem); + } + + function getAnchorItem() { + const linkItem = document.createElement("a"); + linkItem.setAttribute("href", "javascript:void(0)"); + linkItem.setAttribute("id", key); + linkItem.innerText = key; + return linkItem; + } + + function getRatesItem(fieldString) { + let ratesItem = document.createElement("div"); + ratesItem.setAttribute("style", "display: inline;") + ratesItem.innerHTML = fieldString; + return ratesItem; + } + + function createAllElements(dataRates, baseCurr, currViewElem) { + for (key in dataRates) { + if (key !== baseCurr) { + let listItem = getListItem(); + let linkItem = getAnchorItem(); + let ratesItem = getRatesItem(": " + dataRates[key]); + listItem.appendChild(linkItem); + listItem.appendChild(ratesItem); + currViewElem.appendChild(listItem); + } + } + } + + // Create Base currency list item + createBoldListItem("BASE: " + baseCurrency, currencyViewElement); + // Create all rates list items + createAllElements(data.rates, baseCurrency, currencyViewElement); + // Create date list item + createBoldListItem(dateToday, currencyViewElement); + + return true; + } +} \ No newline at end of file diff --git a/app/templates/currency.html b/app/templates/currency.html new file mode 100644 index 00000000..c8c244cb --- /dev/null +++ b/app/templates/currency.html @@ -0,0 +1,43 @@ + + + +
+ + + + ++ +