# Kalkulator Godzin Odoo (Duck Odoo Calc) Aplikacja webowa służąca do pobierania, analizowania oraz interaktywnego kalkulowania godzin pracy na podstawie rejestru obecności z systemu **Odoo** (`hr.attendance`). ## Główne Funkcjonalności * **Logowanie danymi Odoo**: Bezpieczne logowanie i generowanie sesji JWT. * **Automatyczne pobieranie danych**: Pobieranie historii wejść/wyjść dla wybranego miesiąca i roku. * **Wizualizacja danych**: Stackowany wykres kolumnowy (Chart.js) prezentujący przepracowany czas, dni urlopowe oraz chorobowe. * **Interaktywny kalendarz**: * Szybkie dodawanie i usuwanie wpisów obecności. * Wygodne suwaki czasu (`TimeStepper`) do edycji godzin wejścia/wyjścia (z dokładnością do minuty). * Możliwość oznaczania dni jako urlop (8h) lub chorobowe (6.4h - 80%). * **Automatyczne przeliczanie**: * Uwzględnianie świąt państwowych w Polsce oraz weekendów. * Automatyczne odliczanie 15-minutowej przerwy obiadowej (0.25h) przy każdym dniu pracy. * Bieżące wyliczanie salda nadgodzin (bilansu dziennego i ogólnego). --- ## Wymagania i Konfiguracja Przed uruchomieniem aplikacji należy utworzyć plik `.env` w katalogu `backend/` i skonfigurować następujące zmienne: ```env SECRET_KEY=twoj_klucz_jwt_np_z_openssl_rand_hex_32 ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=60 ODDO_URL=https://odoo.twoja-firma.pl DB_NAME=nazwa_bazy_danych_odoo ORIGINS=http://localhost:6080 ``` --- ## Uruchomienie Projektu Aplikacja jest w pełni konteneryzowana za pomocą Docker Compose. Aby ją zbudować i uruchomić locally, wykonaj polecenie: ```bash docker compose up --build ``` Po uruchomieniu: * Aplikacja frontendowa (Vue) będzie dostępna pod adresem: **`http://localhost:6080/odoo/`** * API backendowe (FastAPI) będzie dostępne pod adresem: **`http://localhost:8000/`** (proxy z frontendu przekierowuje zapytania `/odoo/api/` na backend). --- ## Szczegółowa Dokumentacja Pełna specyfikacja techniczna, w tym struktura plików, algorytmy obliczeniowe, konfiguracja Nginx oraz opis testów jednostkowych znajduje się w pliku: * [project_summary.md](project_summary.md)