4.0 Beta (Build 20246)

This commit is contained in:
2020-09-02 22:14:59 +02:00
Unverified
parent 066e1f6a17
commit 2af9fef048
19 changed files with 257 additions and 57 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1,22 +0,0 @@
1.0
- Pierwsza wersja programu składająca się z 4 części
2.0
- Podstawowy tekstowy interfejs
- Scalenie programu w jeden
- Aktualizacja formatu plików z danymi
- Wstępne przystosowanie do działania w czteroletnim liceum i w trzyletniej szkole branżowej
- Aktualizacja kodowania
3.0
- Wprowadzenie pełnego graficznego interfejsu w środowisku tkinter
- Wstępne obsługiwanie wyjątków
- Przeniesienie modułów do oddzielnego pliku
- Stworzenie pliku 'format.py' ze skryptem przetwarzającym dane - przystosowanie programu do ewentualnych zmian w formacie plików z danymi
- Przeniesienie ukrytych ustawień do pliku 'config.cfg'
3.0.1
- Poprawka błędu - pole 3 i 4 nie mają już przypisanej tej samej zmiennej tekstowej
- Przydzielenie wersji, autorów, tytułu programu i lat pracy do zmiennych globalnych środowiska graficznego
4.0 - Work in progress

View File

@@ -7,6 +7,6 @@ country(S) = Rzeczypospolita Polska
schoolData(MSAs) = [LO, 4, 0]|[BS, 3, 1]
schoolyearStart(D) = 01.09.* *:*:*
ifHeadlineInMail(B) = 0
headlineInMail(S) = beta
headlineInMail(S) = mailHeadline
ifHeadlineInOffice(B) = 0
headlineInOffice(S) = beta
headlineInOffice(S) = officeHeadline

View File

@@ -136,7 +136,7 @@ button2Background(C) = #21242D
button2Padding(I) = 0
aboutLogoButtonImg(P) = assets/icon.png
aboutLogoButtonImgSize(I) = 250
aboutInstructionButtonWidth(I) = 15
aboutInstructionButtonWidth(I) = 25
aboutOtherInfoFramePadX(I) = 10
ZPFWindowWidth(I) = 500
ZPFWindowHeight(I) = 400

View File

@@ -139,4 +139,12 @@
- Dodanie możliwości dodawania nagłówków do plików wyjściowych
- Wsparcie dla kodowania ISO-8859-2
- Wyeliminowanie błędu wyrzucającego wyjątek w przypadku próby zapisania format presetu o nazwie zawierającej zakazane znaki.
- Dodanie mechanizmu pozwalającego na automatyczne resetowanie katalogu programu w appdata podczas uruchamiania programu
- Dodanie mechanizmu pozwalającego na automatyczne resetowanie katalogu programu w appdata podczas uruchamiania programu
4.0 Beta (Build 20246)
- Zmiana domyślnych nagłówków
- Zmiana tekstu w przycisku w karcie 'O programie'
- Przeniesienie pliku 'changelog.txt' do sekcji strony 'O programie'
- Dodanie screenshotów programu do sekcji strony 'Opis'
- Rozpoczęcie prac nad sekcją strony 'Dokumentacja'
- Lekkie poprawki w kodzie programu

View File

@@ -11,21 +11,96 @@
<br>
<br>
<br>
<br>
<img src = '../assets/documentation-page/about-program/icon.png'>
<br>
<br>
<br>
<br>
</p>
<h1>
Generator CSV
</h1>
<p id = "about-program-main-text">
<b>Autorzy:</b>
Wersja 4.0 Beta (Build 20246)
</p>
<p id = "about-program-text-centered">
Mateusz Skoczek (styczeń 2019 - wrzesień 2020)<br>
<br>
<b>dla ZSP Sobolew</b><br>
© styczeń 2019 - wrzesień 2020<br>
<br>
Mateusz Skoczek<br>
<br>
dla ZSP Sobolew<br>
</p>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<hr>
<br>
<h2>Historia wersji</h2>
<p id = 'about-program-changelog-main-version'>Wersja 1.0</p>
<br>
<ul>
<li>Pierwsza wersja programu składająca się z 4 części</li>
</ul>
<br>
<br>
<br>
<p id = 'about-program-changelog-main-version'>Wersja 2.0</p>
<br>
<ul>
<li>Podstawowy tekstowy interfejs</li>
<li>Scalenie programu w jeden</li>
<li>Aktualizacja formatu plików z danymi</li>
<li>Wstępne przystosowanie do działania w czteroletnim liceum i w trzyletniej szkole branżowej</li>
<li>Aktualizacja kodowania</li>
</ul>
<br>
<br>
<br>
<p id = 'about-program-changelog-main-version'>Wersja 3.0</p>
<br>
<ul>
<li>Wprowadzenie pełnego graficznego interfejsu w środowisku tkinter</li>
<li>Wstępne obsługiwanie wyjątków</li>
<li>Przeniesienie modułów do oddzielnego pliku</li>
<li>Stworzenie pliku 'format.py' ze skryptem przetwarzającym dane - przystosowanie programu do ewentualnych zmian w formacie plików z danymi</li>
<li>Przeniesienie ukrytych ustawień do pliku 'config.cfg'</li>
</ul>
<br>
<br>
<br>
<p id = 'about-program-changelog-main-version'>Wersja 3.0.1</p>
<br>
<ul>
<li>Poprawka błędu - pole 3 i 4 nie mają już przypisanej tej samej zmiennej tekstowej</li>
<li>Przydzielenie wersji, autorów, tytułu programu i lat pracy do zmiennych globalnych środowiska graficznego</li>
</ul>
<br>
<br>
<br>
<p id = 'about-program-changelog-main-version'>Wersja 4.0 (work in progress)</p>
<br>
<ul>
<li>Zmiany w poszczególnych wersjach developerskich są dostępne w pliku 'dev_changelog.txt'</li>
</ul>
<br>
<br>
<br>
</body>
</html>

View File

@@ -5,6 +5,13 @@ h1 {
text-align: center;
}
h2 {
color: #C0C0C0;
font-family: 'Segoe UI';
font-size: 25px;
text-align: center;
}
h5 {
color: #C0C0C0;
font-family: 'Segoe UI';
@@ -24,6 +31,10 @@ p {
text-align: center;
}
#description-image {
text-align: center;
}
#about-program-image {
text-align: center;
}
@@ -39,6 +50,13 @@ p {
text-align: center;
}
#about-program-changelog-main-version {
color: #C0C0C0;
font-family: 'Segoe UI';
font-size: 17px;
font-weight: 600;
}
td {
color: #C0C0C0;
font-family: 'Segoe UI';
@@ -77,4 +95,10 @@ th {
li {
color: #C0C0C0;
font-family: 'Segoe UI';
}
code {
color: #C0C0C0;
font-size: large;
}

View File

@@ -7,6 +7,12 @@
<title>Generator CSV</title>
</head>
<body>
<p id = "description-text">Program "Generator CSV" służy do przetwarzania plików danymi uczniów/nauczycieli i generowania plików wyjściowych w formacie pozwalającym na import danych na stronach szkoły oraz portal.office.com</p>
<p id = "description-text">Program "Generator CSV" służy do przetwarzania plików danymi uczniów/nauczycieli i generowania plików wyjściowych w formacie pozwalającym na import danych na stronie szkoły oraz portal.office.com</p>
<br>
<br>
<p id = "description-image"><img width = '60%' src = '../assets/documentation-page/description/generator-csv.png'><br></p>
<p id = "description-image"><img width = '60%' src = '../assets/documentation-page/description/format-danych.png'><br></p>
<p id = "description-image"><img width = '60%' src = '../assets/documentation-page/description/ustawienia.png'><br></p>
<p id = "description-image"><img width = '60%' src = '../assets/documentation-page/description/o-programie.png'><br></p>
</body>
</html>

View File

@@ -16,8 +16,8 @@
<nav>
<ul id = "menu-ul">
<li id = "menu-li"><a href = "description.html" target = "content">Opis</a></li>
<li id = "menu-li"><a href = "how_to_use.html" target = "content">Jak używać?</a></li>
<li id = "menu-li"><a href = "program_documentation.html" target = "content">Dokumentacja techniczna</a></li>
<li id = "menu-li"><a href = "instruction.html" target = "content">Instrukcja</a></li>
<li id = "menu-li"><a href = "program_documentation.html" target = "content">Dokumentacja</a></li>
<li id = "menu-li"><a href = "about_program.html" target = "content">O programie</a></li>
</ul>
</nav>

View File

@@ -10,11 +10,11 @@
<button class="accordion"><b>Tworzenie/edytowanie format presetu dla danego pliku źródłowego</b></button>
<div class="panel">
<p>Dane dla przykładu:</p>
<img src = '../assets/documentation-page/how-to-use/example-input-data.png'><br>
<img src = '../assets/documentation-page/instruction/example-input-data.png'><br>
<p>W praktyce układ danych wygląda tak (* - nieznaczące dla programu dane):</p>
<p>[imię] [nazwisko]<br>[klasa] [szkoła]<br>[login], [haslo*]</p>
<p>Uruchom program i otwórz zakładkę FORMAT DANYCH. W pierwszej kolejności należy nadać nazwę presetowi formatu w polu zaznaczonym poniżej lub wybrać preset już istniejący z listy rozwijanej</p>
<img width = '700px' src = '../assets/documentation-page/how-to-use/input-name.png'><br>
<img width = '700px' src = '../assets/documentation-page/instruction/input-name.png'><br>
<p> Aby przejśc do edycji presetu należy wcisnąć przycisk WCZYTAJ</p>
<br>
<h5>Typ osoby</h5>
@@ -97,10 +97,10 @@
<p>W pierwszej kolejności należy przygotować pliki wejściowe oraz stworzyć presety formatu dla tych plików, według instrukcji w sekcji "Tworzenie/edytowanie format presetu dla danego pliku źródłowego" (jednego presetu formatu można używac do kilku plików jeżeli pliki mają ten sam format i to samo kodowanie)</p>
<h5>Krok 2</h5>
<p>Przejdź do zakładki GENERATOR CSV. Możesz przetworzyć naraz 4 pliki wejściowe. Dla każdego pliku należy wybrać jego lokalizację (wpisać ją w polu, oznaczonym kolorem czerwonym na poniższym zdjęciu, lub otworzyć okno wyboru lokalizacji za pomocą przycisku "Przeglądaj" i tam wybrać plik. Następnie należy wybrać preset formatu, odpowiedni dla pliku wejściowego, w polu oznaczonym kolorem zielonym na poniższym zdjęciu.</p>
<img width = '700px' src = '../assets/documentation-page/how-to-use/generate-input-file-settings.png'><br>
<img width = '700px' src = '../assets/documentation-page/instruction/generate-input-file-settings.png'><br>
<h5>Krok 3</h5>
<p>Wybierz lokalizację zapisu pliku wyjściowego dla serwisu szkoły, wpisując lokalizację wraz z nazwą pliku w polu, oznaczonym kolorem czerwonym na poniższym zdjęciu, lub otwierając okno wyboru lokalizacji za pomocą przycisku "Przeglądaj" obok tego pola i tam wybierając plik.<br>Wybierz lokalizację zapisu pliku wyjściowego dla serwisu portal.office.com, wpisując lokalizację wraz z nazwą pliku w polu, oznaczonym kolorem zielonym na poniższym zdjęciu, lub otwierając okno wyboru lokalizacji za pomocą przycisku "Przeglądaj" obok tego pola i tam wybierając plik.</p>
<img width = '700px' src = '../assets/documentation-page/how-to-use/generate-output-file-settings.png'><br>
<img width = '700px' src = '../assets/documentation-page/instruction/generate-output-file-settings.png'><br>
<h5>Krok 4</h5>
<p>Aby rozpocząć generowanie wciśnij przycisk START i potwierdź komunikat. Pliki wyjściowe zostaną zapisane w wybranych lokalizacjach. Przed importem upewnij się że w plikach nie występują błędy.</p>
</div>

View File

@@ -7,6 +7,114 @@
<title>Generator CSV</title>
</head>
<body>
<p>reset_appdata</p>
<button class="accordion"><b>generator.pyw - Główne zmienne globalne</b></button>
<div class="panel">
<p>
<b>Informacje o programie</b><br>
<br>
<code>programName</code> - Zmienna definująca nazwę programu<br>
<code>programVersion</code> - Zmienna definiująca główną wersję programu<br>
<code>programVersionStage</code> - Zmienna definiująca etap rozwoju programu. Wersja stabilna definiowana jest przez pusty string<br>
<code>programVersionBuild</code> - Zmienna definiująca numer buildu programu. Zapisany jest on w formacie '[ostatnie dwie cyfry roku][numer dnia w roku]'<br>
<code>programCustomer</code> - Zmienna definiująca nazwę organizacji zlecającej stworzenie programu<br>
<code>programAuthors</code> - Lista zawierająca nazwy osób rozwijających program.<br>
<code>programToW</code> - Lista zawierająca informacje na temat czasu rozwoju programu. Format: ['miesiąc rozpoczęcia prac', 'rok rozpoczęcia prac', 'aktualny dla rozwoju danej wersji miesiąc', 'aktualny dla rozwoju danej wersji rok']<br>
<br>
<br>
<b>Dozwolone kodowanie plików</b><br>
<br>
<code>allowedCoding</code> - Lista zawierająca wspierane kodowania plików. Są one wyświetlane w rozwijanych listach wyboru kodowania pliku.<br>
<br>
<br>
<b>Dozwolone znaki</b><br>
<br>
<code>allowedCharactersInSeparator</code> - Lista zawierająca znaki które można wpisać w pola dotyczące separatorów osób, linii i danych<br>
</p>
</div>
<button class="accordion"><b>generator.pyw - Import bibliotek</b></button>
<div class="panel">
<p>
<b>Biblioteki główne</b><br>
<br>
W tej sekcji importowane są wszystkie biblioteki niezwiązane z interfejsem graficznych<br>
<ul>
<li>sys (SS) - używana tylko do zamykania programu</li>
<li>os (OS) - odpowiedzialna za polecenia w terminalu</li>
<li>time (TM) - używana do pobierania aktualnej daty i czasu</li>
<li>codecs (CD) - odpowiedzialna za otwieranie i czytanie plików w odpowiednim kodowaniu</li>
<li>pathlib (PT) - używana tylko do pozyskania ścieżki katalogu APPDATA</li>
<li>shutil (SU) - odpowiedzialna za operacje na plikach i folderach</li>
</ul>
</p>
<p>
<br>
<b>Biblioteki interfejsu graficznego</b><br>
<br>
W tej sekcji importowane są wszystkie biblioteki związane z interfejsem graficznym
<br>
<ul>
<li>tkinter (TK) - główne środowisko budowy interfejsu graficznego</li>
<ul>
<li>ttk (TKttk) - biblioteka odpowiedzialna za kontrolki i ich wygląd</li>
<li>messagebox (TKmsb) - biblioteka odpowiedzialna za wyświetlanie komunikatów dialogowych</li>
<li>filedialog (TKfld) - biblioteka odpowiedzialna za wyświetlanie okien wyboru plików</li>
</ul>
<li>PIL (PL), (PLitk), (PLimg) - biblioteka odpowiedzialna za wyświetlanie obrazów</li>
</ul>
</p>
</div>
<button class="accordion"><b>generator.pyw - Okna dialogowe</b></button>
<div class="panel">
<p>
<b>Lista komunikatów</b><br>
<br>
Słownik <code>MSGlist</code> zawiera listę komunikatów. Format: '[kod dialogowy]' : '[komunikat]'. Kod dialogowy składa się z [jednoznakowego znacznika rodzaju okna dialogowego][czterocyfrowego numeru komunikatu]<br>
<br>
<br>
<b><i>Rodzaje okien dialogowych:</i></b>
<ul>
<li>E - komunikaty błędów</li>
<li>I - komunikaty informacyjne</li>
<li>W - komunikaty ostrzegające</li>
<li>A - komunikaty zapytania</li>
</ul>
</p>
<p>
<br>
<b>Funkcja odpowiedzialna za wywoływanie komunikatów dialogowych</b><br>
<br>
Wywoływanie funkcji: <code>MSG(</code>[kod dialogowy]<code>,</code>[<code>True</code> - Zakończ działanie programu po zamknięciu okna dialogowego/<code>False</code> - Kontynuuj działanie programu po zamknięciu okna dialogowego]<code>,</code>[dodatkowe informacje wyświetlane w komunikacie - <b>opcjonalnie</b>]<code>)</code><br>
<br>
</p>
</div>
<button class="accordion"><b>Edycja ustawień ogólnych</b></button>
<div class="panel">
</div>
<script>
var acc = document.getElementsByClassName("accordion");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
/* Toggle between adding and removing the "active" class,
to highlight the button that controls the panel */
this.classList.toggle("active");
/* Toggle between hiding and showing the active panel */
var panel = this.nextElementSibling;
if (panel.style.display === "block") {
panel.style.display = "none";
} else {
panel.style.display = "block";
}
});
}
</script>
</body>
</html>

View File

@@ -2,7 +2,7 @@
# Generator CSV
# Wersja 4.0
# Autorzy: Mateusz Skoczek
# Styczeń 2019 - Czerwiec 2020
# styczeń 2019 - wrzesień 2020
# dla ZSP Sobolew
"""
@@ -10,14 +10,14 @@
# ----------------------------------------- # Zmienne # ----------------------------------------- #
# --------------------------------- # Główne zmienne globalne # --------------------------------- #
class VAR:
# Informacje o programie
programName = 'Generator CSV'
programVersion = '4.0'
programVersionStage = 'Beta'
programVersionBuild = '20245'
programVersionBuild = '20246'
programCustomer = 'ZSP Sobolew'
programAuthors = ['Mateusz Skoczek']
programToW = ['styczeń', '2019', 'wrzesień', '2020']
@@ -32,10 +32,9 @@ class VAR:
# --------------------------- # Import wbudowanych bibliotek Pythona # -------------------------- #
# ------------------------------------- # Import bibliotek # ------------------------------------ #
# Główne
# Biblioteki główne
import sys as SS
import os as OS
import time as TM
@@ -44,7 +43,7 @@ import pathlib as PT
import shutil as SU
# GUI
# Biblioteki interfejsu graficznego
import tkinter as TK
from tkinter import ttk as TKttk
from tkinter import messagebox as TKmsb
@@ -57,9 +56,9 @@ from PIL import Image as PLimg
# ---------------------------------------- # Komunikaty # --------------------------------------- #
# -------------------------------------- # Okna dialogowe # ------------------------------------- #
# Lista komunikatów
MSGlist = {
'E0000' : 'none',
'E0001' : 'Wystąpił błąd podczas inicjalizacji katalogu z plikami konfiguracyjnymi programu w katalogu %APPDATA%',
@@ -68,13 +67,6 @@ MSGlist = {
'E0004' : 'Wystąpił błąd podczas ładowania pliku stylu (style.cfg)',
'E0005' : 'Niepoprawne dane w pliku stylu (style.cfg)',
'E0006' : 'Niepoprawne dane w pliku formatu',
'A0001' : 'Czy chcesz zapisać? Zostanie utworzony nowy plik',
'A0002' : 'Czy chcesz zapisać? Plik zostanie nadpisany',
'A0003' : 'Czy chcesz rozpocząć przetwarzanie plików?',
'A0004' : 'Czy chcesz zapisać?',
'A0005' : 'Czy na pewno chcesz przywrócić domyślne ustawienia ogólne?',
'A0006' : 'Czy na pewno chcesz przywrócić domyślne ustawienia wyglądu?',
'A0007' : 'Czy na pewno chcesz usunąc zaznaczone format presety?',
'E0007' : 'Wymagany przynajmniej jeden plik wejściowy',
'E0008' : 'Nie można odnaleźć jednego z powyższych plików',
'E0009' : 'Nie można odnaleźć jednego z powyższych format presetów',
@@ -83,18 +75,27 @@ MSGlist = {
'E0012' : 'Nie można przetworzyć danych na format wyjściowy',
'E0013' : 'Nie można utworzyć plików wejściowych',
'E0014' : 'Nie można zapisać plików wejściowych',
'I0001' : 'Operacja ukończona pomyślnie',
'I0002' : 'Aplikacja zostanie zamknięta w celu przeładowania ustawień',
'E0015' : 'Nie można usunąć wybranych format presetów',
'E0016' : 'Nie można uruchomić pliku instrukcji (documentation/index.html)',
'E0017' : 'Nie można zapisać pliku formatu',
'A0001' : 'Czy chcesz zapisać? Zostanie utworzony nowy plik',
'A0002' : 'Czy chcesz zapisać? Plik zostanie nadpisany',
'A0003' : 'Czy chcesz rozpocząć przetwarzanie plików?',
'A0004' : 'Czy chcesz zapisać?',
'A0005' : 'Czy na pewno chcesz przywrócić domyślne ustawienia ogólne?',
'A0006' : 'Czy na pewno chcesz przywrócić domyślne ustawienia wyglądu?',
'A0007' : 'Czy na pewno chcesz usunąc zaznaczone format presety?',
'I0001' : 'Operacja ukończona pomyślnie',
'I0002' : 'Aplikacja zostanie zamknięta w celu przeładowania ustawień',
}
# Funkcja odpowiedzialna za wywoływanie komunikatów dialogowych
def MSG(code, terminate, *optionalInfo):
try:
optionalInfo[0]
except:
optionalInfo = ('', '')
optionalInfo = ['']
# Błędy
if code[0] == 'E':
@@ -2859,7 +2860,7 @@ class mainWindow:
self.aboutInstructionButton.config(command = self.aboutInstructionButtonAction)
self.aboutInstructionButton.config(style = 'button1.TButton')
self.aboutInstructionButton.config(width = GUI.R('aboutInstructionButtonWidth'))
self.aboutInstructionButton.config(text = 'Instrukcja')
self.aboutInstructionButton.config(text = 'Więcej informacji')
self.aboutInstructionButton.pack(side = TK.RIGHT)
#############################################################