# 🚀 Konwerter CSV do Optima XML Cześć! 👋 To jest małe narzędzie backendowe (napisane w Javie), które konwertuje pliki CSV do formatu XML zgodnego z Comarch ERP Optima. Twoim zadaniem będzie dorobienie do tego fajnego UI/UX, a to jest na razie sam "silnik", który możesz sobie uruchomić i testować. ## 🤓 Co jest potrzebne? 1. **Java (JDK)**: Wersja 11 lub nowsza. 2. **Maven** (Zalecane): Projekt jest skonfigurowany przy użyciu Mavena. To najprostszy sposób, bo sam pobierze wszystkie potrzebne biblioteki (w tym `opencsv` do czytania CSV). * Aby sprawdzić, czy masz Mavena, wpisz w terminalu: `mvn -version`. --- ## 📂 Struktura Projektu Struktura katalogów jest bardzo prosta: ``` . ├── input/ <-- TU WRZUCASZ PLIKI WEJŚCIOWE │ ├── kontrahenci.csv │ └── rejestr_sprzedazy.csv ├── output/ <-- TUTAJ POJAWI SIĘ WYNIKOWY XML │ └── (na razie pusty) ├── src/main/java/ <-- CAŁY KOD ŹRÓDŁOWY JAVY │ ├── CsvToOptimaXmlConverter.java (główny plik z logiką) │ └── ValidationException.java (nasz specjalny plik do błędów) └── pom.xml <-- "Mózg" projektu (plik konfiguracyjny Mavena) ``` --- ## ▶️ Jak to uruchomić (Sposób 1 - Zalecany: Maven) To najłatwiejszy sposób. Będąc w głównym katalogu projektu (tam, gdzie jest plik `pom.xml`): ### 1. Kompilacja i pobranie bibliotek ```bash mvn compile ``` *Za pierwszym razem Maven połączy się z internetem i pobierze bibliotekę `opencsv`. Następnie skompiluje cały kod.* ### 2. Uruchomienie programu ```bash mvn exec:java ``` *To polecenie uruchomi główną klasę. Jeśli wszystko pójdzie dobrze, w terminalu zobaczysz komunikat o sukcesie, a w katalogu `output/` pojawi się plik `optima_import.xml`.* ### (Opcjonalnie) Czyszczenie projektu ```bash mvn clean ``` *Usuwa skompilowane pliki (katalog `target`), jeśli chcesz zacząć "na czysto".* --- ## ▶️ Jak to uruchomić (Sposób 2 - Ręcznie, bez Mavena) Jeśli nie masz lub nie chcesz instalować Mavena, możesz to zrobić "klasycznie". ### 1. Ręczne pobranie biblioteki Musisz ręcznie pobrać plik `.jar` biblioteki `opencsv`. * **Wersja:** `5.12.0` (lub nowsza) * **Pobierz z:** [Maven Central (kliknij `jar` obok "Downloads")](https://repo1.maven.org/maven2/com/opencsv/opencsv/5.12.0/opencsv-5.12.0.jar) * **Co zrobić:** Pobrany plik `opencsv-5.12.0.jar` umieść w głównym katalogu projektu (obok `pom.xml` i `input`). ### 2. Ręczna kompilacja Będąc w głównym katalogu, utwórz katalog na skompilowane klasy: ```bash mkdir bin ``` Następnie skompiluj kod, wskazując bibliotekę i katalog docelowy: ```bash javac -d bin -cp .:opencsv-5.12.0.jar src/main/java/*.java ``` ### 3. Ręczne uruchomienie Teraz uruchom program, wskazując w "classpath" zarówno bibliotekę, jak i katalog `bin`: ```bash java -cp .:opencsv-5.12.0.jar:bin CsvToOptimaXmlConverter ``` *(Uwaga: na Windowsie zamiast `:` użyj `;` jako separatora w `classpath`)* --- ## 🚦 Ważne informacje ### Separator CSV Program jest obecnie ustawiony na domyślny separator CSV, czyli **przecinek (`,`)**. Wszystkie pliki `.csv` w katalogu `input/` muszą używać przecinków, aby zostały poprawnie wczytane. ### Walidacja ("Test Pani Marisi") Program nie jest "głupi". Zanim zacznie konwersję, sprawdza pliki CSV: * Weryfikuje, czy wszystkie **obowiązkowe kolumny** (np. `AKRONIM` u kontrahenta, `POZ_NETTO` na fakturze) są wypełnione. * Jeśli czegoś brakuje, program **zatrzyma się** i wyświetli w terminalu bardzo czytelny, "ludzki" komunikat o błędzie (np. `Błąd w danych (w fakturze o numerze 'FV/2/2024')! Brakuje wartości w kolumnie: 'POZ_NETTO'.`). Dzięki temu od razu wiesz, co i gdzie poprawić w pliku CSV. --- ## 🗒️ TODO (Co dalej?) Lista zadań do zrobienia, aby ten projekt był jeszcze lepszy: * [ ] **Zbudować graficzny interfejs (UI)**, który będzie zawierał: * [ ] Przycisk do wyboru pliku `kontrahenci.csv`. * [ ] Przycisk do wyboru pliku `rejestr_sprzedazy.csv`. * [ ] Przycisk "Start", który uruchamia konwersję. * [ ] Czytelny komunikat (labelka, okienko pop-up) informujący o sukcesie lub wyświetlający błąd walidacji. * [ ] **Rozbudować walidację** danych wejściowych (zgodnie z dokumentacją Comarch): * [ ] **Walidacja typów danych** (np. czy `POZ_NETTO` jest liczbą, a `DATA_WYSTAWIENIA` poprawną datą). * [ ] **Walidacja długości pól** (np. czy `AKRONIM` nie przekracza 20 znaków). * [ ] **Walidacja logiki biznesowej** (np. sprawdzenie, czy w rejestrze sprzedaży `POZ_NETTO * (POZ_STAWKA_VAT / 100)` faktycznie równa się `POZ_VAT`, z uwzględnieniem zaokrągleń). Powodzenia! Daj znać, jakbyś miała jakieś problemy.